2013-08-21 53 views
0

很明顯,Objective-C不支持函數/方法重載,與php相同。但是任何人都知道爲什麼這些語言不支持這個功能。爲什麼Objective-C,PHP不支持方法重載?

+0

PHP支持使用魔術方法重載方法。 –

+0

PHP支持它,但採用與標準熟知的方式不同的方式 –

+2

在像PHP這樣的鬆散類型語言的上下文中,函數重載基本上是不相關的,因爲參數可以具有任何數據類型:即使現在,儘管PHP具有類型提示對於對象和數組而言,標量不能被類型化(此時正在考慮這種情況),因此具有函數重載是不現實的 –

回答

0

其實PHP不支持函數重載,但方式不同。 PHP的overloading features與Java的不同:

PHP對「重載」的解釋與大多數面向對象的語言不同。重載傳統上提供了具有相同名稱但不同數量和類型參數的多個方法的能力。

簽出以下代碼塊。

功能查找和n個數的:

function findSum() { 
    $sum = 0; 
    foreach (func_get_args() as $arg) { 
     $sum += $arg; 
    } 
    return $sum; 
} 

echo findSum(1, 2), '<br />'; //outputs 3 
echo findSum(10, 2, 100), '<br />'; //outputs 112 
echo findSum(10, 22, 0.5, 0.75, 12.50), '<br />'; //outputs 45.75 
Function to add two numbers or to concatenate two strings: 

function add() { 
    //cross check for exactly two parameters passed 
    //while calling this function 
    if (func_num_args() != 2) { 
     trigger_error('Expecting two arguments', E_USER_ERROR); 
    } 

    //getting two arguments 
    $args = func_get_args(); 
    $arg1 = $args[0]; 
    $arg2 = $args[1]; 

    //check whether they are integers 
    if (is_int($arg1) && is_int($arg2)) { 
     //return sum of two numbers 
     return $arg1 + $arg2; 
    } 

    //check whether they are strings 
    if (is_string($arg1) && is_string($arg2)) { 
     //return concatenated string 
     return $arg1 . ' ' . $arg2; 
    } 

    trigger_error('Incorrect parameters passed', E_USER_ERROR); 
} 

echo add(10, 15), '<br />'; //outputs 25 
echo add("Hello", "World"), '<br />'; //outputs Hello World 

面向對象的方法,包括方法重載:

重載在PHP提供了手段,動態地「創造」的屬性和方法。這些動態實體通過魔術方法進行處理,可以在類中爲各種動作類型建立。

編號:http://php.net/manual/en/language.oop5.overloading.php

在PHP中,重載意味着你可以在運行時添加對象的成員,通過實施一些神奇的方法,比如__set__get__call

類Foo {

public function __call($method, $args) { 

    if ($method === 'findSum') { 
     echo 'Sum is calculated to ' . $this->_getSum($args); 
    } else { 
     echo "Called method $method"; 
    } 
} 

private function _getSum($args) { 
    $sum = 0; 
    foreach ($args as $arg) { 
     $sum += $arg; 
    } 
    return $sum; 
} 

} 

$foo = new Foo; 
$foo->bar1(); // Called method bar1 
$foo->bar2(); // Called method bar2 
$foo->findSum(10, 50, 30); //Sum is calculated to 90 
$foo->findSum(10.75, 101); //Sum is calculated to 111.75 
相關問題