[英]PHP Class function declaration issue
我有一個函數重新聲明問題。 因此,我試圖多次調用此示例。
class myClass {
function abc() {
function internal() {
return "i am internal";
}
return internal();
}
}
$myClass = new myClass();
echo $myClass->abc();
echo $myClass->abc(); // HERE IS THE PROBLEM when i call same function second time
PHP顯示致命錯誤:無法重新聲明internal()(先前聲明)。
有誰知道如何解決這個問題?
提前致謝。
您無法重新聲明功能期限,因此請嘗試以下操作:
<?php
class myClass {
function abc() {
return $this->internal();
}
private function internal() {
return "i am internal";
}
}
?>
在定義函數之前檢查函數是否存在:
class myClass {
function abc() {
if ( ! function_exists('internal')) {
function internal() {
return "i am internal";
}
}
return internal();
}
}
當您使用function <name>()
聲明函數時,您不會在您認為的范圍內聲明它。 該函數在
類
全局范圍中聲明,而不是在函數/類范圍中聲明。
請參閱PHP文檔: http : //www.php.net/manual/zh/functions.user-defined.php#example-149
因此,當您調用abc
,您將重新聲明全局函數internal
。
如果你想做你正在做的事情,你可以改用閉包 (注意:這只適用於PHP 5.3+)。 這樣做的好處是能夠從abc
讀取局部變量(如果使用use
關鍵字)。
class myClass {
function abc() {
$internal = function() {
return "i am internal";
};
return $internal();
}
}
您還可以將internal
聲明為類的私有函數,尤其是在它不會更改的情況下。 為什么要繼續重新制作功能?
class myClass {
private function internal(){
return "i am internal";
}
function abc() {
return $this->internal();
}
}
或者:
if (!function_exists('internal')) { function internal ... }
但是,您必須注意,在這種情況下,內部函數也將在類范圍之外可用。 勞倫斯的解決方案是一種更好的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.