使用类中的方法创建类


Creating a class with methods within a class?

我想创建一个本身就是一个类的属性,并在"父"类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
您可以使用

__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
)

你不能在 PHP 中这样做。

您可以创建另一个类,然后在主类中初始化它并通过变量访问它,或者如果要将所有代码保存在一个对象中,则可以模拟方法链。 本文 http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.html 展示了 PHP 中方法链接的一种方式。

你可以这样做:

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();

各自。