2012-06-06 16 views
4

對不起,如果這是一個完全nube聽起來質疑。我不熟悉PHP語法約定,所以我不完全確定我應該尋找什麼。PHP塊語法約定

我得到的這本書給出了下面的例子,作爲一個傳統的PHP代碼塊。

<?php 
//... some code ... 
?> 

我得到的,但令人困惑的一點是,示例代碼我看着從XAMPP一些例子(如光盤集源代碼)似乎並不遵循相同的約定。

而是,示例代碼更像這樣。

<? include("langsettings.php"); ?> 

<? 
//... some code ... 
?> 

這兩種形式是否等同於所有意圖和目的,還是我完全錯過了一些對於php介紹至關重要的東西?

此外,爲什麼不使用結束標籤(或做它,我只是沒有看到他們)?我想我正在用關閉標籤來思考JavaScript,但我想不管怎麼說,它們都是代碼庫,所以它可以工作。它看起來像html在其語法的核心上是對稱的,但是PHP語法排序從對稱性中突破,這很奇怪。

謝謝你的時間。

+1

PHP是一種解釋型語言,顯然它不需要對稱性。我總是使用第一個選項('<?php'),我無法回答你的主要問題。 +1 –

+0

可能重複[是否可以使用PHP短標籤?](http://stackoverflow.com/questions/200640/are-php-short-tags-acceptable-to-use) –

回答

4

這兩者之間唯一的區別在於第二個需要the setting short_open_tag to be enabled(在新的PHP版本中默認爲關閉)。

<?php定期打開標籤。

<?短開放標籤(默認禁用)

除了這一點,像<? include("langsettings.php"); ?>上封閉在自己的一雙<? ?>其自己的行位置是真正的風格具體到你發現它的來源的問題英寸不同的項目使用非常廣泛的約定,而PHP書籍每個都傾向於採用自己的約定。

PHP不幸的是沒有任何真正的特定編碼約定,例如你可能在Ruby,Java或Python等語言中找到的東西,在我的不請自來的觀點中,它是PHP的主要缺點之一,也是它最偉大的一個靈活性。現在

,至於是否短開放標籤的使用很好的做法在現代的PHP應用程序完全是另外一個問題,which has been discussed at great length here.

+0

而且,雖然PHP是在初學者中非常軟的服務器端語言,它還邀請在沒有框架的情況下編寫混亂的程序代碼。 –

1

的PHP代碼塊的結束標記?>。結束標記不是必需的,但如果要將頁面的一部分解釋爲PHP,並將其他部分解釋爲文字HTML,則可以使用它。人們有時候會這樣做,如果他們想在頁面開始時進行一些PHP處理,然後編寫一個普通的靜態HTML頁面,並在其中附帶一些PHP變量。

換句話說,在<?php標記之後和?>標記之前的文本被解釋爲PHP。如果省略了結束標記,則開放php標記和頁面結束之間的所有文本都將解釋爲PHP。

一個例外是,如果你在一個php塊中打開一個條件語句,然後關閉php塊,頁面上的所有下面的文本將受到該條件限制,直到你開始一個新的php塊並關閉條件陳述。例如,如果你運行該腳本:

<?php 
if(1==0) { 
?> 

<B>conditional HTML</B> 

<?php 
} 
?> 

兩個PHP塊之間的HTML不會出現在網頁上。

請注意,不同的PHP塊都是同一腳本的一部分。在一個塊中定義的變量,函數和類可以被該頁面上的其他塊使用,等等。

+0

這對理解非常重要!基本上,你永遠不會有一個關閉的php標籤。這將始終確保NO數據發送到不由PHP本身創建的輸出緩衝區。 –

+0

這個答案有些腥意。如果「頁面上任何不在'<?php'和'?>'之間的內容都不會被解釋爲PHP」,那麼沒有'?>'的頁面在' <?php'和'?>',整個頁面應該被解釋爲HTML。但是,不僅省略'?>'工作,而且還推薦*對於沒有文字HTML的頁面。 – cHao

+0

@cHao感謝您指出這一點!我修改了我的答案。我寫的內容適用於OP展示的例子,但這不是一般的正確規則。 – octern

0

PHP的起始標籤是<?php,結束標籤是?>

如果服務器上允許有短標籤,則還可以使用<??>語法。

你可以閱讀更多有關在Offcial PHP Documentation

最好的問候, 湯姆。

3

這兩種形式是等同的,但您會發現短代碼可能會給您帶來問題。我會堅持使用正規標籤:

<?php 

?> 

編輯關閉塊:結束標籤是可選的,但前提是你想要的一切後,開始標籤被解釋爲PHP直到頁面結束。

這些塊以外的任何內容都被解釋爲HTML,因此您必須確保您注意您正在打開和關閉的位置。

例如:

<body> 

<h1> The Heading </h1> 

<p> 
    <?php 
     echo "This is the Content"; 
    ?> 
</p> 

</body> 

會的工作,並且輸出PHP生成的字符串到您的段落標記。

PHP與JavaScript類似,它沒有'open'和'close'標籤,而是使用分號來聲明特定php語句的結尾。

include "file1.php"; 
include "file2.php"; 

如果您忘記了分號,像這樣

include "file1.php" 
include "file2.php"; 

這將產生一個錯誤。

+0

很好的答案;我只是補充說明結束標記是可選的。如果省略,則開始的PHP標記和頁面結束之間的所有文本都將解釋爲PHP。 – octern

+0

好點,我做了編輯。謝謝! –

+0

我忽略了在我原來的評論中提到:我在我的答案中做了同樣的省略,並被cHao(: – octern

0

有關短版長打開標籤的問題已被涵蓋。

我會在這些答案中提到一個尚未提及的問題中的一個常見問題。

比較如下:

<?php 
/* 
    * Some comments here, (c) notice, etc. 
    */ 

    header("Content-type: text/html"); 
    ... 

VS

<?php 
/* 
    * Some comments here, (c) notice, etc. 
    */ 
?> 

<?php 
    header("Content-type: text/html"); 
    ... 

第二個不起作用。

爲什麼?

在PHP的第一個塊和第二個塊之間存在空白的非PHP代碼行。在不使用output buffering的服務器環境中,空白行向PHP發送信號,表明標題全部完成,並且從此處開始的任何內容都是發送到瀏覽器的HTML(或其他內容)的一部分。

然後,我們嘗試發送標題。其中產生:

Warning: Cannot modify header information - headers already sent 

所以......小心你的空白行。內置PHP的空行很好。在你的PHP之外,它可能有令人討厭的副作用。