PHP でのメソッドのオーバーロード

PHPz
リリース: 2024-08-29 12:59:19
オリジナル
862 人が閲覧しました

メソッドのオーバーロードは、プロパティのオーバーロード以外のオーバーロードの 1 つのタイプです。それは、そのクラス スコープ内で作成されていない 1 つまたは複数の動的メソッドを作成することです。 PHP メソッドのオーバーロードの概念は、適切な目的のために指定されたマジック メソッドをトリガーするのにも役立ちます。プロパティのオーバーロードの概念とは別に、PHP メソッドのオーバーロードの概念により、オブジェクトと静的コンテキストの両方で関数呼び出しが可能になります。基本的には OOP のメソッドの 1 つです。

広告 このカテゴリーの人気コース PHP 開発者 - 専門分野 | 8コースシリーズ | 3 つの模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

構文:

Public _call (string $name1 , array $arguments1 ) : mixed
Public static _callStatic (string $name1 , array $arguments1 ) : mixed
ログイン後にコピー

PHP ではメソッドのオーバーロードはどのように機能しますか?

メソッドのオーバーロードは、動的メソッドを作成することでクラス内の宣言を操作します。また、適切な目的のためにいくつかのマジック メソッドをトリガーすることによっても機能し、静的コンテキストとオブジェクトの両方で関数呼び出しを呼び出します。メソッド オーバーロードの概念は、C、Java などの他のほとんどのプログラミング言語でも問題ありません。メソッド オーバーロードを静的ポリモーフィズムと呼びます。

いくつかの魔法の関数があります。

  • _call(): オブジェクトのコンテキストは、call() 関数を使用してオーバーロードされたメソッドの実行をトリガーできます。
  • _callStatic(): callstatic() マジック関数は、静的コンテキストでオーバーロードされた概念/メソッドをアクティブ化します。

PHP でのメソッドのオーバーロードの例

以下に示す PHP でのメソッドのオーバーロードの例を示します

例 #1

以下の PHP プログラミング言語の $name1 引数は、呼び出されるメソッドの名前です。一方、$arguments は、$name で指定されたメソッドに渡すために使用されるパラメーター/引数を含む列挙配列の 1 つです。

_call() 関数は 2 つのパラメーター $name1 と $arguments1 を使用して使用されます。 Implode() 関数は、配列要素、つまり文字列/文から文字列を返します。 Implode(separator, array) では、セパレータはオプションのパラメータですが、下位互換性のために両方のパラメータを使用することが推奨されているだけです。 separator パラメータ内の特定のタイプの区切り文字は、配列パラメータに存在する単語/文字列に区切り文字を挿入します。

Obj 変数は SPK という新しいオブジェクトを作成します。オブジェクト->オブジェクトのメソッドとプロパティにアクセスするのに役立ちます。 Spk は静的コンテキストから実行されますが、obj はオブジェクト コンテキストから実行されます。

コード:

<?php
class SPK {
public function __call($name1, $arguments1) {
echo "object method calling '$name1' "
. implode(', ', $arguments1). "\n";
}
public static function __callStatic($name1, $arguments1) {
echo "static method Calling '$name1' "
. implode(', ', $arguments1). "\n";
}
}
// Create new object
$obj = new SPK;
$obj->runTest('in one of the object context');
SPK::runTest('in one of the static context');
?>
ログイン後にコピー

出力:

PHP でのメソッドのオーバーロード

例 #2

コード例では、die() 関数を実行してメッセージを表示し、現在の PHP スクリプトを終了する単一の _call() 関数を使用して foo1 クラスを定義します。 Die() は exit() 関数と同じで、かっこ内のパラメータを 1 つだけ受け入れます。

Foo1->変数 $foo1.

からオブジェクトのメソッドとプロパティにアクセスするのに役立ちます。

コード:

<?php
class Foo1 {
function __call($m1, $a1) {
die($m1);
}
}
$foo1 = new Foo1;
print $foo1->{' wow !'}();
// outputs ' wow !'
?>
ログイン後にコピー

出力:

PHP でのメソッドのオーバーロード

例 #3

これは、call() 関数とプライベート/保護されたメソッドを使用した、PHP プログラミング言語でのメソッドのオーバーロードの例です。

ここでは、プライベート/プロテクトメソッドの呼び出しは、タイプミスなどによるアクセスによって行われます。

Echo _METHOD_PHP_EOL は、使用されているメソッドのタイプを返します。オブジェクト コンテキストから実行される _call() 関数のみを使用します。

コード:

<?php
class TestMagicCallMethod1 {
public function foo1()
{
echo __METHOD__.PHP_EOL;
}
public function __call($method1, $args1)
{
echo __METHOD__.PHP_EOL;
if(method_exists($this, $method1))
{
$this->$method1();
}
}
protected function bar1()
{
echo __METHOD__.PHP_EOL;
}
private function baz1()
{
echo __METHOD__.PHP_EOL;
}
}
$test    =    new TestMagicCallMethod1();
$test->foo1();
$test->bar1();
$test->baz1();
?>
ログイン後にコピー

出力:

PHP でのメソッドのオーバーロード

例 #4

これは call() および call static() 関数の概念のプログラムであり、メソッドのオーバーロードの概念に使用されます。以下のこの PHP プログラムは、インスタンス内の _callstatic() 関数の前に、まず _call() 関数を呼び出します。

Var dump() は、PHP およびその他のオブジェクト指向プログラミング言語の括弧内の変数に関する情報を提供します。それ以外は、上記の例と同様に、すべて同じです。

コード:

<?php
class A1 {
public function test1 () {
static::who();
A1::who();
self::who();
$this->who();
}
public static function __callStatic($a1, $b1) {
var_dump('A1 static');
}
public function __call($a1, $b1) {
var_dump('A1 call');
}
}
$a1 = new A1;
$a1->test1();
?>
ログイン後にコピー

出力:

PHP でのメソッドのオーバーロード

例 #5

これは _call() 関数の例です。オブジェクトのクラスが存在しないメソッドで呼び出された場合、メソッドの代わりに _call() 関数の概念が呼び出されます。

Execute the _call() function to support the concept of method overloading through the dynamic area() method included in the PHP program below. The object’s behavior will vary depending on the parameters that pass to it.

Code:

<?php
class Shape1 {
const PI1 = 3.142 ;
function __call($name1,$arg1){
if($name1 == 'area1')
switch(count($arg1)){
case 0 : return 0 ;
case 1 : return self::PI1 * $arg1[0] ;
case 2 : return $arg1[0] * $arg1[1];
}
}
}
$circle1 = new Shape1();
echo $circle1->area1(3);
$rect1 = new Shape1();
echo $rect1->area1(8,6);
?>
ログイン後にコピー

Output:

PHP でのメソッドのオーバーロード

Example #6

Here, the _call() and _callstatic() functions are used like in the 1st example.

Code:

<?php
class Toys1
{
public function __call($name1,$pavan1){
echo "Magic method invoked while method overloading with object reference";
}
public static function __callStatic($name1,$pavan1){
echo "Magic method invoked while method overloading with static access";
}
}
$objToys1 = new Toys1;
$objToys1->overloaded_method();
Toys1::overloaded_property();
?>
ログイン後にコピー

Output:

PHP でのメソッドのオーバーロード

Example #7

The call () function of method Overloading triggered and invoked the inaccessible methods in the object context. Call() is mixed with the syntax _call(string $name1 , array $arguments1).

Then $name1 parameter is for the name of the method which is to be called, whereas the array $arguments1 is the parameter that is an enumerated array that contains/has the parameters which are to be passed to the $name variables method.

Code:

<?php
class ABC1 {
public function __call($method_name1, $arguments1) {
$methodArray1 = array('displayMessage11','displayMessage12');
if (in_array($method_name1,$methodArray1) === false) {
die("\n Method does not exist");
}
if (count($arguments1) === 2) {
$this->displayMessage12($arguments1[0],$arguments1[1]);
}
elseif (count($arguments1) === 1) {
$this->displayMessage11($arguments1[0]);
} else {
echo "\n unknown method";
return false;
}
}
function displayMessage11($var11) {
echo "\n from func1($var11)";
}
function displayMessage12($var11,$var12) {
echo "\n from func2($var11,$var12)";
}
}
$obj1 = new ABC1;
$obj1->displayMessage11('hello');
$obj1->displayMessage12('hello','hello2');
$obj1->displayMessage13('Hello');
?>
ログイン後にコピー

Output:

PHP でのメソッドのオーバーロード

Example #8

It is also just like the first example program. Check it once.

Code:

<?php
class MethodOverloading1
{
public function __call($name1,$pavan1){
echo "\n--It is now With the object reference ";
}
public static function __callStatic($name1,$pavan1){
echo "\n-----It is now With the static reference \n";
}
}
// Here now creating the object of the class " MethodOverloading "
$obj1 = new MethodOverloading1;
echo "Method Overloading1 Now in Command ";
// Now using the object's reference
$obj1->DemoTest1();
// Now using the static's reference
MethodOverloading1::DemoTest1();
?>
ログイン後にコピー

Output:

PHP でのメソッドのオーバーロード

Example #9

This program shows the area of the circle and rectangle using some parameters and the call() function of the method overloading concept. The program will only run with the object context due to the object assigning an object variable to the class, etc.

Code:

<?php
class TDshape1 {
const Pi1 = 3.142 ;  // constant value
function __call($fname1, $argument1){
if($fname1 == 'area1')
switch(count($argument1)){
case 0 : return 0 ;
case 1 : return self::Pi1 * $argument1[0] ; // 3.14 * 15
case 2 : return $argument1[0] * $argument1[1];  // 5 * 11
}
}
}
$circle1 = new TDshape1();
echo "Area of the circle:".$circle1->area1(15); // display output of the area of circle
$rect1 = new TDshape1();
echo "\n Area of the rectangle:".$rect1->area1(5,11); // display output of the area of rectangle
?>
ログイン後にコピー

Output:

PHP でのメソッドのオーバーロード

以上がPHP でのメソッドのオーバーロードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
php
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート