Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:无继承地扩展类方法_Php_Oop_Extending - Fatal编程技术网

PHP:无继承地扩展类方法

PHP:无继承地扩展类方法,php,oop,extending,Php,Oop,Extending,我正在尝试将其他功能文件与其他文件分开,这些文件可以在运行时包含,也可以不包含。我认为这是构建模块化体系结构的好方法,但我找不到没有继承的方法来实现它。交易是我有一个基本类: 类模型{ 受保护的$名称; 函数_u构造(){ $this->name='default'; } 函数getName(){ 返回“Model:”。$this->name; } } 和特定类别: 类项扩展模型{ 函数getName(){ 返回'Item:'。$this->name; } } 我在项目中使用的: $item

我正在尝试将其他功能文件与其他文件分开,这些文件可以在运行时包含,也可以不包含。我认为这是构建模块化体系结构的好方法,但我找不到没有继承的方法来实现它。交易是我有一个基本类:

类模型{
受保护的$名称;
函数_u构造(){
$this->name='default';
}
函数getName(){
返回“Model:”。$this->name;
}
}
和特定类别:

类项扩展模型{
函数getName(){
返回'Item:'。$this->name;
}
}
我在项目中使用的:

$item=newitem();
echo$item->getName();
结果将是:

项目:默认值

我想在其他位置更改getName()行为以获得如下结果:

class ExtendedItem扩展项{
函数getName(){
返回parent::getName()。'这是扩展方法';
}
}
$extendedItem=新的extendedItem();
echo$extendedItem->getName();
Item:默认值,这是扩展方法


但我想在不使用子类的情况下实现它,即不接触项目或模型类,也不更改对象初始化。我想会有不止一个这样的扩展,它们会动态地包含进来。我应该以什么方式进行搜索,或者你能解释一下如何实现这一点吗

提前感谢您的回答


UPD:换句话说,我想在类代码之外更改类方法行为,保留其默认功能。

将有一个选项“将有多个这样的扩展,它们将动态包含”。这不是Traits或继承的情况,如果你想让一个对象在函数调用的末尾添加一些文本,那么就通过构造函数、公共属性、方法或函数调用本身给这个对象该文本。@MarkBaker我试着用traits,但是Item类不应该知道扩展。@Sammitch在函数调用末尾添加文本只是一个示例,您可能正在寻找。不能动态扩展类。至少不是以安全或可维护的方式。