2016-09-26 9 views
-1

実際に私はOOPSの概念を新しく理解していません。また、 "PHPでオーバーロードされていません"と読んでいます。この例では、どこかで私を取得できませんでした。OOPSで関数のオーバーロードとオーバーライドについて教えてください。

<?php 
class Toys{ 
    private $str; 
    public function __set($name,$value){ 
     $this->str[$name] = $value; 
    } 

    public function __get($name){ 
     echo "Overloaded Property name = " . $this->str[$name] . "<br/>"; 
    } 

    public function __isset($name){ 
     if(isset($this->str[$name])){ 
      echo "Property \$$name is set.<br/>";  
     } else { 
      echo "Property \$$name is not set.<br/>"; 
     } 
    } 

    public function __unset($name){ 
     unset($this->str[$name]); 
     echo "\$$name is unset <br/>"; 
    } 
} 

$objToys = new Toys; 

/* setters and getters on dynamic properties */ 
$objToys->overloaded_property = "new"; 
echo $objToys->overloaded_property . "\n\n"; 
/*Operations with dynamic properties values*/ 

isset($objToys->overloaded_property); 
unset($objToys->overloaded_property); 
isset($objToys->overloaded_property); 
?> 
+1

この例ではオーバーロードはありません –

答えて

1

Method Overriding

Method Overloading

簡単に説明スーパークラスまたはインタフェースで定義された方法は、そのサブクラスの1つによって再定義されている場合メソッドのオーバーライドは、このように動作をスーパークラスを置換/変更、ある

提供します。実装を呼び出すか、別のものを呼び出すかは、操作が呼び出されるオブジェクトに応じて、実行時に動的に行われます。オーバーライド時にメソッドのシグネチャが変わらないことに注意してください。

メソッドオーバーロードはポリモーフィズムとは無関係です。これは、異なる形式のメソッドを定義することを指します(通常、異なるパラメータの数または型を受け取ることによって)。静的多型と見ることができます。実装または別のものを呼び出すという決定は、コーディング時に行われます。この場合、メソッドのシグネチャが変更されなければならないことに注意してください。

-2

パラメータはObjectで、このオブジェクトに値を追加できます。だからあなたは必要以上の値を渡すことができるので、オーバーロードが必要ありません。

-1

オーバーロードを使用すると、同じ名前で異なるタイプの引数を使用して関数を記述できます。コンパイラは、引数の型に基づいて、正しい関数をコンパイル時として選択します。

PHPには静的型がないため(コンパイル時に型が分からないため)、PHPにはありません。

オーバーライドはOOにのみ存在します。オーバーライドとは、親クラスが既に定義している、クラス内のメソッドを定義することを指します。だからすでに親によって定義されているあなたのクラスのオーバーライドメソッド。

+0

基本については正しいです。私はコメントなしで下降投票を理解していない..しかし、まずメソッドは引数(実行)を受け入れるが、パラメータ(定義)によって定義される。引数は、パラメータが与えられた値です。 2つを混同しないでください。 – dbf

関連する問題