1

それ自体がクラスであるプロパティを作成し、「親」クラス内に他のメソッドを追加して、次の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
4

3 に答える 3

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
)
于 2013-02-01T19:30:10.193 に答える
0

PHPではそれができません。

別のクラスを作成してメイン クラスで初期化し、変数を介してアクセスするか、コードをすべて 1 つのオブジェクト内に保持する場合は、メソッド チェーンをシミュレートできます。この記事http://www.talkphp.com/advanced-php-programming/1163-php5-method-chaining.htmlは、PHP でのメソッド チェーンの 1 つの方法を示しています。

于 2013-02-01T19:25:00.717 に答える
-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();

それぞれ。

于 2013-02-01T19:33:02.377 に答える