ホームページ >php教程 >php手册 >メソッドのオーバーロード(書き換え)/メソッドカバレッジ、マジック関数の実装

メソッドのオーバーロード(書き換え)/メソッドカバレッジ、マジック関数の実装

WBOY
WBOYオリジナル
2016-10-24 00:00:001797ブラウズ


メソッドのオーバーロード
関数名が異なります。関数の数やパラメータの型が異なるため、同じ関数名を呼び出すことができますが、異なる関数を区別できます
class A{
public function test1(){
echo "test1" ;}
public function test1($a){
echo "test1 haha​​";}
}


オーバーロード
$a=newA();
$a->test1();
$a->test1(222);

上記の使用法は間違っています

マジック関数メソッドのオーバーロード実装

class A{
public function test1($p){
echo "1つのパラメータを受け入れる";}
public function test1($p){
echo "2つのパラメータを受け入れる";}
}
は__call
__callを提供しますメソッドを呼び出すオブジェクトで、そのメソッドが存在しない場合、システムは自動的に __call
function __call($method,$p){

を呼び出します

var_dump($p);
if($method=="test1"){
if(count($p)==1){
$this->test1($p);
}else if(count ($p)==2){
$this->test2($p);
}
}
}

$a=newA();
$a->テスト(1);
$a->テスト(1,2);


マジック関数
__set、__get、__construct、__destruct、__call、__isset、__unset

__LINE__ 出力行数
、__FILE__ 出力ファイル名
、__DIR__、
__CLASS__ 出力クラス名


メソッド書き換え/メソッド上書き(オーバーロード)

class Animal{
public $name;
protected $price;
function cry(){
echo "わからない";}

}
クラス Dog extends Animal{
//オーバーライド
function cry(){
echo "puppy";}
}
class Pig extends Animal{
//override
function cry(){
echo "pig" ;}
}

$dog1=新しい犬();
$dog1->泣き();
$pig=1新しい豚();
$pig1->泣き();
?>

書き換えについて:
すべてのサブクラスにメソッドがあることが親クラスでわかっているが、そのメソッドの書き方がわからない場合、サブクラスにこのメソッドをオーバーライドさせることができます
1. 書き換えを実装するには、サブクラスの名前が必要です。そのメソッドのメソッドはパラメーター リストとまったく同じですが、パラメーター名が同じである必要はありません
2. サブクラスが親クラス (public/protected) のメソッドを呼び出す必要がある場合は、parent:: メソッドを使用できます。名前 (パラメータ...)、親クラス名:: メソッド名 (パラメータ...)
3. メソッド カバレッジを実装する場合、アクセス修飾子は異なっていてもかまいませんが、サブクラスのアクセス スコープ >= アクセスを満たす必要があります。親クラスのスコープ


ポリモーフィズムはどこに反映されますか?
サブクラスが親クラスのメソッドをオーバーライドしない場合、$call->cry() は親クラスを呼び出します。 )

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。