php - 使用组合的方式来代替trait,但是报错了,请问为什么会报错?
本文介绍了php - 使用组合的方式来代替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!
报错信息如下:
请问需要如何修改代码才能有效?
解决方案
call_user_func([$this->hello, $name]);
这篇关于php - 使用组合的方式来代替trait,但是报错了,请问为什么会报错?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文