我想创建一个属性本身的属性,并在“父”类MyName
中添加其他方法,以便我能够做类似
$myname = new MyName();
$myname->event->post($params);
我尝试了以下内容,但它不起作用:
class MyName {
public function __construct() {
$this->event = new stdClass();
$this->event->post = function($params) {
print_r($params);
};
}
}
$x = new MyName();
$x->event->post(array(1, 2, 3));
最终会标记以下致命错误:
Fatal error: Call to undefined method stdClass::post() in C:\xampp\htdocs\Arkway\recreation\primepromotions\api\classes\FacebookWrapper.php on line 25
答案 0 :(得分:1)
您可以使用__call
来访问内部闭包数组,可能是这样的:
class MyName {
public function __construct() {
$this->event = new EventObj();
$this->event->post = function($params) {
print_r($params);
};
}
}
class EventObj {
private $events = array();
public function __set($key, $val) {
$this->events[$key] = $val;
}
public function __call($func, $params) {
if (isset($this->events[$func])) {
call_user_func_array($this->events[$func], $params);
}
}
}
$x = new MyName();
$x->event->post(array(1, 2, 3));
输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
答案 1 :(得分:0)
你不能用PHP做到这一点。
您可以创建另一个类,然后在主类中初始化它并通过变量访问它,或者如果您想将代码保存在一个对象中,则可以模拟方法链接。本文http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html展示了PHP中方法链接的一种方式。
答案 2 :(得分:-1)
你可以这样做:
class MyName extends stdClass{
或
class MyName {
public function getStdClass(){
return new StdClass();
}
你可以致电:
$test = new MyName();
$test->someStdClassMethod();
或
$test = new MyName();
$test2 = $test->getStdClass();
$test2->someStdClassMethod();
各个