2017-12-25 9 views
1

私はレコードのほとんどすべてのデータベーステーブルのために拡張しているクラスを持っています。これまでのところすべてが正常でしたが、呼び出された関数に$thisを使用する必要があります。

これは、例えば私のクラスである:

class myClass 
{ 
    public function __call($method, $args) 
    { 
     if (isset($this->$method)) { 
      $func = $this->$method; 
      return call_user_func_array($func, $args); 
     } 
    } 
} 

これはテストに私の関数である。

$testFunction = function($variable1) { 
    $this->_temp_instance = clone $this; 
} 

そして私は私のクラスに割り当てている:

$class_instance = new myClass(); 
$class_instance->new_assigned_function = $testFunction; 
$class_instance->new_assigned_function(); 

私は」エラーが発生しました:

Fatal error: Uncaught Error: Using $this when not in object context in... 

拡張クラスまたは継承クラスを編集せずに作成することはできますか?

私はtoooooo多くのクラスがあります:/

ありがとうございました。あなたがを達成しようとしている(と、なぜあなたはこれを達成したい)いくつかの他、cleanier道をは私には非常にハックようだと何を後にしていることはほぼ確実に解けるですが、何

+0

テスト機能の中で「これ」の目的は何ですか?クラス間でメソッドを共有し、それらをチェックアウトする場合は、特性を使用できます。 – Ali

+0

@Ali、これはこれまでのところ私の主な理由を示しています...私の目的はクラスのプロパティ、メソッドなどに到達しています – ahmetertem

+0

オブジェクトやクラスに関するメタデータが必要な場合は、組み込みのReflectionツールを使用しないでください。 https://secure.php.net/manual/en/book.reflection.php –

答えて

2

- 答えるためにあなたの質問...

bind the closureです。

$instance = new myClass; 
$boundFunction = $testFunction->bindTo($instance, $instance); 
$instance->func = $boundFunction; 
$instance->func(); 
関連する問題