php可以包含什么代码,我可以将代码包含到PHP类中吗?

不能。您不能在类主体中包含文件。

在定义类的文件中,您只能将文件包含在方法体中或类体外。

从你的描述我带你想要这个:

class MyClass

{

protected $_prop;

include 'myclass-methods.php';

}

public function myMethod()

{

$this->$_prop = 1;

}

运行此代码将导致

Parse error: syntax error, unexpected T_INCLUDE, expecting T_FUNCTION

这是可能的

class MyClass

{

protected $_prop;

public function __construct() // or any other method

{

include 'some-functions.php';

foo($b); // echoes 'a';

}

}

$b = 'a';

function foo($str)

{

echo $str;

}

这样做,将include文件的内容导入方法范围,而不是类范围。您可以在include文件中包括函数和变量,但不包括方法。你可以,但不应该把整个脚本,以及改变什么方法,例如。

// ...

public function __construct($someCondition)

{

// No No Code here

include ($someCondition === 'whatever') ? 'whatever.php' : 'default.php';

}

// ...

echo 'whatever';

echo 'foo';

然而,修补类这种方式来展现不同的行为不是你应该如何在OOP中做。这只是平淡的错误,应该让你的眼睛流血。

因为你想动态改变行为,扩展类也不是一个好的选择(见下面为什么)。你真正想要做的是写一个interface,让你的类使用实现这个接口的对象,从而确保适当的方法可用。这称为Strategy Pattern,工作如下:

interface Meowing

{

public function meow();

}

现在你得到所有的喵行为必须遵守的合同,即有一个喵方法。下一步定义一个喵行为:

class RegularMeow implements Meowing

{

public function meow()

{

return 'meow';

}

}

现在使用它,使用:

class Cat

{

protected $_meowing;

public function setMeowing(Meowing $meowing)

{

$this->_meowing = $meowing;

}

public function meow()

{

$this->_meowing->meow()

}

}

通过添加Meowing TypeHint到setMeowing,你确保传递的param实现Meowing接口。让我们定义另一个喵行为:

class LolkatMeow implements Meowing

{

public function meow()

{

return 'lolz xD';

}

}

现在,你可以轻松地交换这样的行为:

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';

虽然你也可以解决上面的inheritance通过定义一个abstract BaseCat和喵方法,然后从中导出具体的RegularCat和Lolkat类,你必须考虑你想要实现的。如果你的猫永远不会改变他们喵的方式,继续使用继承,但如果你的RegularCat和Lolkat应该能够做任意的话,然后使用战略模式。

有关PHP中的更多design patterns,请查看以下资源:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值