2011-03-04 70 views
0

我在我的單個頁面中使用此代碼來創建獨特的標題和活動選項卡。PHP是否有效回顯一個不存在的變量?

<?php 
    $title = "Blanktree Design"; 
    $home = "class=\"active\""; 
    include "header.php"; 
?> 

而我在header.php中使用此代碼來執行這些差異。

<title><?php echo $title; ?></title> 

<ul id="nav"> 
    <li <?php echo $home ?>><span>begin</span><a href="/">home</a></li> 
    <li <?php echo $about ?>><span>curious?</span><a href="/about">about</a></li> 
    <li <?php echo $contact ?>><span>locate</span><a href="/contact">contact</a></li> 
</ul> 

我最感興趣的是,因爲我是全新的PHP是...是否有效只是回聲一個不存在的變量? 我的意思是......它的工作原理並沒有出錯。但我只是想知道這是不是很糟糕的編程。

在此先感謝。

議決

在這一天所有的討論是完全的結束,這是我發現什麼最有意義的我的具體情況:

<?php 
    $title = "Blanktree Design"; 
    $home = "class=\"active\""; 
    $about = $contact = ""; 
    include "header.php"; 
?> 

並調用變量與之前相同:

<ul id="nav"> 
    <li <?php echo $home ?>><span>begin</span><a href="/">home</a></li> 
    <li <?php echo $about ?>><span>curious?</span><a href="/about">about</a></li> 
    <li <?php echo $contact ?>><span>locate</span><a href="/contact">contact</a></li> 
</ul> 
+0

你在說「$ about」和「$ contact」嗎? – glomad 2011-03-04 01:30:16

+1

打開錯誤報告。 '注意:未定義變量:myvar'。此外,還有更好的方法來確定活動頁面。 – drudge 2011-03-04 01:31:28

+0

你能鏈接到一個更好的例子或給出一個更好的例子嗎?這是我能想到的最簡單的事情,但是再次...我是PHP的新手。 – 2011-03-04 01:39:24

回答

4

是的,回聲(和任何其他用法)總是不好編程一個不存在的變量。
它實際上是錯誤 - 你只是因爲錯誤的PHP設置而看不到它。

error_reporting(E_ALL); 

在腳本的頂部會顯示這些錯誤。

儘管PHP幾乎不允許使用未定義的變量,但一個好的編程習慣是在代碼使用前定義每個變量
它可以讓你避免許多錯誤和意外行爲,甚至是嚴重的漏洞。

然而,大多數人認爲這個問題是錯誤的,認爲應該在使用前檢查一個變量是否存在。但考慮一下這個話題,你會發現它很荒謬 - 似乎這種檢查的唯一目的就是惹上一條錯誤信息。那麼,語言開發人員發明這樣的警告只是爲了打擾程序員的不必要的驗證?

當然不是。
此警告的真正意圖(與其他警告一樣)是讓程序員知道出現了問題。
這真的很容易:PHP只是告訴你「難道你不會忘記給這個變量分配一些值嗎?兄弟?看來你會使用它,所以,你期望它有一些價值,但沒有'只是讓你知道。「 但是通過使用isset(),我們只是嘮叨這個警告,沒有更多。對自己造成傷害。

此外,通過初始化一個變量,可以確定變量存在及其值。

一個小例子:

<? 
while ($i < 10) { 
    echo $i." "; 
} 
echo "<br>"; 
while ($i < 10) { 
    echo $i." "; 
} 
?> 

多少行會打印這個片段呢?只有一個。

因此,每一個腳本變量應在使用前初始化。

特別的是outside variables
程序員無法控制它的行爲。有時外部變量的存在是應用程序邏輯的一種情況。例如:

if (isset($_GET['id'])) { 
    //displays particular article 
} else { 
    //displays list of articles 
} 

它允許檢查這種方式。
但原始外部變量的使用應嚴格限制。例如,如果要使用先前輸入的值填充表單字段,建議您創建另一個變量,例如$ FORM,然後使用從原始外部變量準備好的值初始化它的項目。

+0

因此,在這種情況下,最好只分配空白值,例如$ home =「」;在那些變量不會被使用的頁面的開頭? – 2011-03-04 01:48:21

+0

@Robert是的,它會讓你確信沒有意外的值可以打印出來。 – 2011-03-04 02:08:10

+1

@Robert,它會使這個錯誤消息爲你工作!我正在尋找合適的詞語,似乎我終於找到了它。這樣的錯誤信息是你的朋友,而不是敵人。如果你忘記設置$ contact變量 - 它會告訴你!什麼可以更方便?但通過使用isset(),你只會嘮叨這個警告,而不是更多 – 2011-03-04 02:13:57

4

更好的編程習慣是檢查它是否設置爲第一位。如

if (isset($variable)) 
    echo $variable; 
+0

這裏實際上並沒有更好的 – 2011-03-04 01:33:14

+0

所以這是一個簡單的修復。我只是將它添加到每個。 isset只是一個簡單的函數來查看變量是否存在?我認爲處理能力可以忽略不計? – 2011-03-04 01:36:33

+0

這是微不足道的開銷,是的。我不確定Col Shrapnel爲什麼說檢查並不好。如果您不確定是否設置了某些內容,我認爲最好檢查一下。 – 2011-03-04 01:40:53

相關問題