2011-03-08 147 views
0

在PHP中,是否有可能,我可以停止從內部功能的功能?例如從另一個功能回採功能

function_1(){ 
    ...... 
function2(); 
.... 
} 

我可以停止功能1使用函數2句子,但避免回採全腳本???

非常感謝!

+0

當你說「停止」時,你能解釋一下你的意思嗎? – Charles 2011-03-08 03:41:57

+0

像「返回false」,但我不能把返回function2();停止執行。 – 2011-03-08 03:42:52

+0

如果你將它作爲驗證或驗證的一部分,你可以拋出一個異常並且有一些外部函數來捕獲它。 – Thai 2011-03-08 03:50:21

回答

4

如果捕獲第二個函數的返回值,則可以執行此操作。

function my_first_function() { 
    // some code 
    if(!my_second_function()) { 
    return; 
    } 
} 

function my_second_function() { 
    return false; 
} 

my_first_function(); 

當然,您需要對其進行修改以滿足您的需求,但這應該讓您開始。

+0

這是問題所在,我無法修改結構,我只能插入函數。 – 2011-03-08 03:48:47

+1

如果你不能改變代碼,那麼你不能做你想做的事情。 – Charles 2011-03-08 03:52:38

+0

我看,看看goto運算符(http://us.php.net/goto)。我從來沒有使用過它,我不推薦使用它,因爲我相信如果你最終使用它,你的代碼可能沒有正確設計,但這可能是你正在尋找的。是否有一個原因,你只能添加功能,而不是修改代碼? – philhq 2011-03-08 03:56:44

0

您可以使用RunKit extension,它允許您重新定義/重命名函數。默認情況下,它只允許在用戶定義的函數上完成這項工作,但是還有一個php.ini設置可以使其用於內部函數。

,將讓你做這樣的事情:

runkit_function_rename('print', 'internal_print'); 
function print(...) { 
    echo 'welcome to my own implementation of print'; 
} 

然而,內部功能搞亂基本上可以打破PHP,所以在你自己的風險。

+0

這就是我需要的,但問題是,並非所有的erver都有PECL! – 2011-03-08 04:02:31

+1

雖然它只是唯一實用的選擇。如果你需要禁用這樣的功能,那麼你應該重新考慮你的安全模型。 – 2011-03-08 04:07:59