很明顯,Objective-C不支持函數/方法重載,與php相同。但是任何人都知道爲什麼這些語言不支持這個功能。爲什麼Objective-C,PHP不支持方法重載?
0
A
回答
1
的Objective-C不支持重載爲explained in that post
PHP5支持超載
你需要一個PHP版本> 5.1.0
查看PHP文檔:http://php.net/manual/en/language.oop5.overloading.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
相關問題
- 1. Php支持方法重載
- 2. 爲什麼flyway不支持重置?
- 3. 爲什麼PHP不支持多線程?
- 4. ParseKit語法不支持「allowedGroupingSeparator」。爲什麼?
- 5. 爲什麼客觀C不支持重載
- 6. GHC Haskell爲什麼不支持重載記錄參數名稱?
- 7. bootcss.com支持IE8,但bootstrap官方網站不支持?爲什麼?
- 8. EL支持重載方法嗎?
- 9. 爲什麼部分方法支持引用但不支持參數
- 10. 方法解析 - 爲什麼重載的方法不叫
- 11. 爲什麼不允許重載方法內的方法(例如重載閉包)?
- 12. 爲什麼jQuery本身不支持.disable()方法?
- 13. 爲什麼Thread類不支持克隆方法?
- 14. 對象不支持此屬性或方法。爲什麼?
- 15. 爲什麼ajax post方法不支持「空格」?
- 16. 爲什麼.Net 1.1中不支持匿名方法?
- 17. 爲什麼不支持SpringMVC請求方法'GET'?
- 18. 爲什麼此代碼返回「不支持指定的方法」。
- 19. 爲什麼CDI豆不支持最終方法
- 20. 爲什麼你需要重載方法?
- 21. asp.net mvc支持什麼方法?
- 22. 什麼是方法重載?
- 23. 爲什麼JVM不支持強制類/類加載器卸載?
- 24. os.environ的類型是什麼?爲什麼它不支持視圖鍵方法
- 25. 爲什麼Haskell/GHC支持記錄名稱重載
- 26. 爲什麼顯示HTTP狀態405 - 此方法不支持HTTP方法POST?
- 27. xmlrpc不支持php的方法調用
- 28. 爲什麼不能重載無參數方法,爲
- 29. 爲什麼不太匹配重載的方法被稱爲
- 30. 爲什麼在WPF中支持多重綁定,但不支持silverlight?
PHP支持使用魔術方法重載方法。 –
PHP支持它,但採用與標準熟知的方式不同的方式 –
在像PHP這樣的鬆散類型語言的上下文中,函數重載基本上是不相關的,因爲參數可以具有任何數據類型:即使現在,儘管PHP具有類型提示對於對象和數組而言,標量不能被類型化(此時正在考慮這種情況),因此具有函數重載是不現實的 –