使用组合的方式来代替trait,但是报错了,请问为什么会报错?
如题,突发奇想,想用组合的方式来实现trait的效果,但是报错了,代码如下:
<?php
class Hello2
{
public function sayHello()
{
echo 'Hello ';
}
}
class World2
{
public function sayWorld()
{
echo 'World';
}
}
class MyHelloWorld2
{
public $hello;
public $world;
public function __construct()
{
$this->hello = new Hello2();
$this->world = new World2();
}
public function sayExclamationMark()
{
echo '!';
}
public function __call($name, $arguments)
{
if (method_exists($this->hello, $name)) {
var_dump('$this->hello->'.$name.'()');
// $this->hello->sayHello();
// 这个是可行的
// return $this->hello->sayHello();
// 这个就报错了
return $this->hello->$name.'()';
}
if (method_exists($this->world, $name)) {
return $this->world->$name.'()';
}
if (!method_exists($this->hello, $name) && !method_exists($this->world, $name)) {
echo '不存在此方法';
}
}
}
$obj = new MyHelloWorld2();
$obj->sayHello();
$obj->sayWorld();
$obj->sayExclamationMark();
// 输出:
// Hello World!
报错信息如下:
请问需要如何修改代码才能有效?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
call_user_func([$this->hello, $name]);
这样才行:
关键字:可变函数