簡體   English   中英

PHP類函數聲明問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM