不可以。您不能在類體中包含文件。
在定義類的文件中,您只能包含方法體或以外的類體中的文件。
從你的描述我把你想這樣的:
<?php // MyClass.php
class MyClass
{
protected $_prop;
include 'myclass-methods.php';
}
<?php // myclass-methods.php
public function myMethod()
{
$this->$_prop = 1;
}
運行這段代碼將導致
Parse error: syntax error, unexpected T_INCLUDE, expecting T_FUNCTION
什麼是可能的,雖然這是
<?php // MyClass.php
class MyClass
{
protected $_prop;
public function __construct() // or any other method
{
include 'some-functions.php';
foo($b); // echoes 'a';
}
}
<?php // some-functions.php
$b = 'a';
function foo($str)
{
echo $str;
}
這樣做,這樣,會將include文件的內容導入方法範圍,而不是類範圍。您可以在include文件中包含函數和變量,但不包括方法。您可以但不應該也將整個腳本放入其中,並更改該方法的作用,例如,
<?php // MyClass.php
// ...
public function __construct($someCondition)
{
// No No Code here
include ($someCondition === 'whatever') ? 'whatever.php' : 'default.php';
}
// ...
<?php // whatever.php
echo 'whatever';
<?php // default.php
echo 'foo';
但是,修補類以這種方式展現不同的行爲不是你應該如何在OOP中做到這一點。這只是錯誤的,應該讓你的眼睛流血。
既然你想動態地改變行爲,擴展類也不是一個好的選擇(見下文爲什麼)。你真正想要做的是寫一個interface並讓你的類使用實現這個接口的對象,從而確保適當的方法可用。這就是所謂的Strategy Pattern和工作原理是這樣:
<?php // Meowing.php
interface Meowing
{
public function meow();
}
你現在明白了所有的喵喵叫聲行爲必須服從,即有喵方法合同。接下來定義喵喵叫的行爲:
<?php // RegularMeow.php
class RegularMeow implements Meowing
{
public function meow()
{
return 'meow';
}
}
我們使用它,使用:
<?php // Cat.php
class Cat
{
protected $_meowing;
public function setMeowing(Meowing $meowing)
{
$this->_meowing = $meowing;
}
public function meow()
{
$this->_meowing->meow()
}
}
通過添加喵喵叫TypeHint到setMeowing,您確保傳遞PARAM實現喵喵叫聲接口。讓我們來定義另一喵喵叫的行爲:
<?php // LolkatMeow.php
class LolkatMeow implements Meowing
{
public function meow()
{
return 'lolz xD';
}
}
現在,您可以輕鬆地交換行爲是這樣的:
<?php
require_once 'Meowing.php';
require_once 'RegularMeow.php';
require_once 'LolkatMeow.php';
require_once 'Cat.php';
$cat = new Cat;
$cat->setMeowing(new RegularMeow);
echo $cat->meow; // outputs 'meow';
// now to change the behavior
$cat->setMeowing(new LolkatMeow);
echo $cat->meow; // outputs 'lolz xD';
雖然你也可能通過定義abstract BaseCat和喵方法,然後解決了以上inheritance從中得到具體的RegularCat和Lolkat類,你必須考慮你想要達到的目標。如果你的貓永遠不會改變他們的喵喵聲,繼續使用繼承,但是如果你的RegularCat和Lolkat應該能夠執行任意的meows,那麼就使用策略模式。說我不是太
不這樣做,學會正確使用OOP。 – 2009-12-24 11:39:01
使用命名空間! – zloctb 2013-09-28 17:39:09