Için aşırı yükleme PHP işlevi nedir?

3 Cevap

Java gibi dillerde, aşırı yüklenme bu şekilde kullanılabilir:

void test($foo, $bar){}
int test($foo){}

Eğer test() 2 argüman, örneğin test($x, $y); ile adlandırılan eğer, ilk fonksiyon denir olacaktır. Eğer sadece 1 argüman örneğin test($x); geçerse, 2. fonksiyon denir olacaktır.

Manuel itibaren php 5 yüklenme var yok gibi görünüyor, ama ne için? Ben bu konuyla ilgili kitabını anlamak için görünmüyor olabilir ..

3 Cevap

PHP's meaning of overloading Java'nın daha farklıdır. PHP olarak, some of the __magic yöntemleri , like __get uygulayarak, çalışma zamanında nesne üyeleri ekleyebilirsiniz araçlar aşırı yükleme, __set, __call, __callStatic. Yeni üyeler ile nesneleri yüklemek.

Overloading in PHP provides means to dynamically "create" properties and methods. These dynamic entities are processed via magic methods one can establish in a class for various action types.

Örnek:

class Foo
{
    public function __call($method, $args)
    {
        echo "Called method $method";
    }
}

$foo = new Foo;

$foo->bar(); // Called method bar
$foo->baz(); // Called method baz

Ve arada, PHP PHP 4.3.0 yüklenme bu tür destekler. Tek fark, önce PHP 5 sürümlerinde açıkça overload() işlevini kullanarak yüklenme etkinleştirmek zorunda olduğunu.

Üzerinde bir fonksiyon yüklemek için sadece null varsayılan olarak parametre geçtikleri,

class ParentClass
{
   function mymethod($arg1 = null, $arg2 = null, $arg3 = null)  
   {  
     if( $arg1 == null && $arg2 == null && $arg3 == null ){ 
        return 'function has got zero parameters <br />';
     }
     else{
       $str = '';
       if( $arg1 != null ) 
        $str .= "arg1 = ".$arg1." <br />";

       if( $arg2 != null ) 
        $str .= "arg2 = ".$arg2." <br />";

       if( $arg3 != null ) 
        $str .= "arg3 = ".$arg3." <br />";

       return $str;
      }
   }
}

// and call it in order given below ...

$obj = new ParentClass;

echo '<br />$obj->mymethod()<br />';
echo $obj->mymethod();

echo '<br />$obj->mymethod(null,"test") <br />';
echo $obj->mymethod(null,'test');

echo '<br /> $obj->mymethod("test","test","test")<br />';
echo $obj->mymethod('test','test','test');