PHP の重要な点の 1 つは、シンボルの内容ではなく構文を使用してシンボルの型を認識することです。そのため、何を参照するかを明示的に記述する必要があります。
多くの言語では、次のように書くだけです:
myVariable
myFunction
myConstant
myClass
myClass.myStaticMethod
myObject.myMethod
また、パーサー/コンパイラーは、それぞれのシンボルが何を意味するかを知っています。これは、シンボルに割り当てられているものを知るだけで、シンボルが何を参照しているかを認識できるためです。
ただし、PHP では、どの「シンボル名前空間」を参照しているかをパーサーに知らせるために構文を使用する必要があるため、通常は次のように記述します。
$myVariable
myFunction()
myConstant
new myClass
myClass::myStaticMethod()
$myObject->method()
ただし、ご覧のとおり、これらは参照ではなく呼び出しです。PHP で関数、クラス、またはメソッドへの参照を渡すには、文字列と配列を組み合わせた構文が使用されます。
'myFunction'
array('myClass', 'myStaticMethod')
array($myObject, 'myMethod')
あなたの場合、 myFunc の代わりに' myFunc 'を使用して、関数への参照を渡し、 myFunc定数の値を取得していないことを PHP に知らせる必要があります。
もう 1 つの問題は、$myObject->callback() を記述すると、PHP は括弧のためにcallbackがメソッドであると想定し、プロパティをループアップしようとしないことです。
期待される結果を得るには、プロパティコールバックのコピー/参照をローカル変数に格納し、次の構文を使用する必要があります。
$callback = $this->callback;
return $callback();
ドル記号と括弧があるため、クロージャーとして識別されます。または call_user_func 関数で呼び出します:
call_user_func($this->callback);
一方、これはコールバックを期待する組み込み関数です。