PHPは動的な型型言語です。つまり、変数はスクリプトを実行するときに事前定義されたタイプを必要としません。また、関数にはパラメータータイプまたは返品タイプも持たないことを意味します。 PHPの過負荷とは、実行時にクラスのプロパティと方法を動的に作成または変更することを指します。
PHPは、2つの主要なオーバーロードフォームをサポートしています。
1。属性オーバーロード:マジックメソッド__get()および__set()を使用して、クラスのプロパティに動的にアクセスまたは設定できます。
2。メソッドオーバーロード:魔法の方法__call()および__callstatic()を使用して、クラスメソッドを動的に呼び出すことができます。
存在しないプロパティにアクセスするとき、 __get()メソッドが呼び出されます。この魔法の方法により、プロパティを動的に追加できます。
class Test {
private $data = [
'name' => 'Tom',
'age' => 18
];
public function __get($name) {
if (isset($this->data[$name])) {
return $this->data[$name];
}
return null;
}
}
$test = new Test();
echo $test->name; // 出力 Tom
echo $test->age; // 出力 18
echo $test->gender; // 出力 null
__get()メソッドは、パラメーター$ name 、つまり属性名を受け入れます。プロパティが存在しない場合、 nullが返されます。
値を未開発のプロパティに割り当てるとき、 __set()メソッドがトリガーされます。この魔法の方法により、属性とその値を動的に追加できます。
class Test {
private $data = [];
public function __set($name, $value) {
$this->data[$name] = $value;
}
}
$test = new Test();
$test->name = 'Tom';
echo $test->name; // 出力 Tom
__set()メソッドは、 $ name (属性名)と$ value (属性値)の2つのパラメーターを受け入れます。
存在しないメソッドが呼び出されると、 __call()メソッドが呼び出されます。この魔法の方法では、方法を動的に追加できます。
class Test {
public function __call($name, $arguments) {
if ($name == 'add') {
return array_sum($arguments);
}
return null;
}
}
$test = new Test();
echo $test->add(1, 2, 3); // 出力 6
echo $test->subtract(10, 2); // 出力 null
__CALL()メソッドは、 $ name (メソッド名)と$引数(メソッドパラメーター)の2つのパラメーターを受け入れます。メソッドが存在しない場合、 nullが返されます。
存在しない静的メソッドが呼び出される場合、 __callstatic()メソッドが呼び出されます。この方法は、静的メソッドで使用されていることを除いて、 __call()メソッドに似ています。
class Test {
public static function __callStatic($name, $arguments) {
if ($name == 'add') {
return array_sum($arguments);
}
return null;
}
}
echo Test::add(1, 2, 3); // 出力 6
echo Test::subtract(10, 2); // 出力 null
__callstatic()メソッドは__call()メソッドに似ていますが、静的メソッドにのみ適用されます。