私はメソッドを委譲したいと思っているいくつかのPHPクラフトを持っています。一種の貧しい人のミックスイン。PHPはメソッドを呼び出すために__getを使用しますか?
基本的に私は、次のようになる:
<?php
class Apprentice
{
public function magic() {
echo 'Abracadabra!';
}
}
class Sourcerer // I work magic with the source
{
private $apprentice;
public function __construct(){
$this->apprentice = new Apprentice();
}
public function __get($key) {
if (method_exists($this->apprentice, $key)) {
return $this->apprentice->{$key};
}
throw Exception("no magic left");
}
}
$source = new Sourcerer();
$source->magic();
?>
Fatal error: Call to undefined method Sourcerer::magic() in .../test__get.php
をスローしないように。
これは++です。 __callはあなたが本当に探しているものです。さらに、今後このような機能を静的関数で使用する場合は、__callStaticを調べることをお勧めします。 – Navarr
Ohhh ...私はドキュメント全体を誤って読んでいました。 '__call()'は、それが関数であるかのようにインスタンスを呼び出すためのもので、 '$ s = new S(); $ s(); 'ありがとう! – quodlibetor
@quodlibetorメソッド['__invoke'](http://php.net/manual/en/language.oop5.magic.php#object.invoke)はインスタンスを関数のように呼び出すためのものです。 – Wilt