2010-10-07 32 views
1

我做了這樣的功能(沒有必要在這裏寫全功能):如何在函數調用中缺少參數時抑制錯誤?

public function selectNode($from, $attributes = null, $childs = null) 

,當然,如果我把它叫做這樣:

$node->selectNode(); 

的爭論$from ISN」 t初始化,然後你有一個警告錯誤。 我知道你可以抑制錯誤@$node->selectNode();或類似的東西感謝@

但是,我想自己處理它。 如果可以的話,我該怎麼做

我發現的唯一方法是像這樣初始化它public function selectNode($from = null, $attributes = null, $childs = null)但這並沒有說清楚($ from不是其他的選項)。

(而且,當然,這個功能,在這裏,僅僅是一個例子,它可以擴展到其他功能)

+0

什麼意思是「自己處理」?你應該看看例外情況。 – 2010-10-07 10:49:24

+0

正如我在下面的答案中所說的,異常和try/catch似乎是一個好的開始。但是,仍然顯示默認的PHP警告(這是正常的,它就像一個分析錯誤)。 – Shikiryu 2010-10-07 11:09:58

+1

好吧,用Thariama的建議Try/Catch,我在我的類的構造函數中添加了'error_reporting(E_ALL ^(E_NOTICE | E_WARNING));'即使它不好(從開發人員的角度來看)讓警告顯示! – Shikiryu 2010-10-07 11:20:10

回答

1

你可以使用一個try-catch block處理自己的錯誤。

try { 
    $node->selectNode(); 
} 
catch (Exception $e){ 
    echo $e; // do whatever you like here with error info $e, if you leave the parenthesis empty here nothing is done and the error message is suppressed 
} 
+0

謝謝,但它仍然顯示警告消息,再加上另一個'exception'Exception',其中包含消息'uhoh,no'where'statement?''。但是,現在,它停止了函數,當它發現一個異常(我添加了'if(!$ from){拋出新的異常('uhoh,no'where'statement?');}'在我的函數中 – Shikiryu 2010-10-07 10:54:17

+0

接受我的 – Shikiryu 2010-10-07 11:20:40

+0

謝謝,很高興它現在適合你 – Thariama 2010-10-07 11:47:06

5

你怎麼會錯過一個必需的參數?它不是一個文件或一個外部變量!只要試圖調用這個腳本就會得到這個錯誤。這就像解析錯誤。在這裏處理什麼? 它是發展階段的錯誤。它只是需要糾正,而不是處理。

無論如何,你做錯了。

切勿爲您的代碼添加故意錯誤。

語言錯誤報告機制用於處理意外錯誤,而不是故意的錯誤。
如果您希望在這裏出現錯誤 - 請親自處理。不要讓PHP提出錯誤 因此,使它$from = null,,是的。然後處理這個null任何你想要的。

+4

爲大膽的部分+1) – NikiC 2010-10-07 10:55:23

+1

我不想在我的代碼中加入故意錯誤。我只是想壓制默認的PHP錯誤並處理這種情況(有人不帶參數地調用它,某個人足夠愚蠢......)我自己(顯示另一條消息,停止函數並調用另一個函數,但我仍然不知道) 。 Try/Catch似乎是一個不錯的開始,但仍然有'Warning' – Shikiryu 2010-10-07 11:04:51

+2

@Chouchenos這個警告有什麼問題?只是保持原樣。 – 2010-10-07 11:12:21

2

我想你已經在php.ini中設置了display_errors,現在這些警告彈出在你的屏幕上,你不想看到他們彈出了嗎?如果是這樣的話,那麼改變你的php.ini:然後

display_errors = Off 
log_errors = On 
error_log = /path/to/php-error.log 

錯誤將被記錄到你的error_log中指定的文件,而不會在屏幕上顯示出來了。

+0

不幸的是,我沒有訪問我的php.ini – Shikiryu 2010-10-07 11:24:40

+0

@Chouchenos - 但你有權訪問ini_set(),不是嗎? – GZipp 2010-10-07 11:51:34

+1

@Chouchenos:不要告訴我你已經有了一個配置了display_errors = On的生產服務器......如果是這樣,我會對管理員說一句話,讓他立即改變它。 – wimvds 2010-10-07 12:10:27

4

當然,如果$ from參數不是必需的,您應該應爲分配一個默認變量,因此它是可選的,然後根據這個進行檢查。

它可能是最優雅的,只是檢查是否從代碼isset $你引用它,並用null作爲默認的參數提供之前,isset將一個空值返回

0

你正在尋找以下(或其變體之一)?

<?php error_reporting(0); ?>