【PHP學習筆記】基本語法部分

僅記錄區別於我自己已學的其他語言語法存在差異之處。

兩種打印語句

拷貝代碼後自行運行查看效果即可

<?php
    /*
    echo 和 print 區別:
        echo - 可以輸出一個或多個字符串
        print - 只允許輸出一個字符串,返回值總爲 1
        提示:echo 輸出的速度比 print 快, echo 沒有返回值,print有返回值1。
    */

    //echo 是一個語言結構,使用的時候可以不用加括號,也可以加上括號: echo 或 echo()。
    echo "<h2>PHP echo 語句</h2>";
    echo "echo 是一個語言結構,使用的時候可以不用加括號,也可以加上括號: echo 或 echo()。<br />";
    
    echo "使用echo顯示變量<br />";
    $num1 = 1;
    echo $num1;
    echo "<br />";

    $num2 = 2;
    $arr = array("shenjie","沈傑");
    echo "使用echo拼接顯示變量:num1 = $num1; num2 = $num2 ,數組變量使用大括號囊括{$arr[0]} {$arr[1]}<br />";
    echo "注意字符串和變量混合使用時,變量前後用空格與字符串隔開";

    print "<h2>PHP print 語句</h2>";
    print "print 同樣是一個語言結構,可以使用括號,也可以不使用括號: print 或 print()。<br />";
    print "使用print顯示變量<br />";
    print $num1;
    print "<br />";
    
    print "使用print拼接顯示變量:num1 = $num1; num2 = $num2 ,數組變量使用大括號囊括{$arr[0]} {$arr[1]}<br />";
    print "注意字符串和變量混合使用時,變量前後用空格與字符串隔開";
    ?>

EOF文本塊

<?php
    $name = "沈傑";

    echo <<<EOF
        <h1>PHP EOF(heredoc) 使用說明</h1>
        <p>PHP EOF(heredoc)是一種在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序語言(像Perl、PHP、Python和Ruby)裏定義一個字符串的方法。</p>
        
        <span>使用概述:<br />
            1. 必須後接分號,否則編譯通不過。<br />
            2. EOF 可以用任意其它字符代替,只需保證結束標識與開始標識一致。<br />
            3. 結束標識必須頂格獨自佔一行(即必須從行首開始,前後不能銜接任何空白和字符)<br/>
            4. 開始標識可以不帶引號或帶單雙引號,不帶引號與帶雙引號效果一致,解釋內嵌的變量和轉義符號,帶單引號則不解釋內嵌的變量和轉義符號。<br/>
            5. 當內容需要內嵌引號(單引號或雙引號)時,不需要加轉義符,本身對單雙引號轉義,此處相當與q和qq的用法。<br>
        </span>
      EOF;
    // 結束需要獨立一行且前後不能空格


    echo "<h1>將EOF文本塊定義爲變量後輸出</h1>";
    $a= <<<EOF
        <p>"ABC":$name</p>
        "123"

    EOF;

    echo $a;//EOF文本塊被當做變量輸出
    ?>

發現一個有趣的情況:即便不使用EOF關鍵字,只要格式正確依然能夠正常運行,比如如下這段代碼:

<?php
echo <<<沈傑
   <p>即便這樣也能正常運行~~~</P>
沈傑;

?>

變量

<?php
    /*
    多行註釋
    */
    //單行註釋
    $x = 5; // 全局變量

    function myTest()
    {
        $y = 10; // 局部變量
        echo "變量 y 爲: $y<br />";
        global $x;  //獲取全局變量x
        echo "變量 x 爲:$x<br />";


        static $z = 0;
        $z++;
        echo "每次調用都能保持存在的變量 z 爲:$z<br />";
    }

    myTest();

    echo "<p>測試函數外變量:<p>";
    echo "變量 x 爲: $x<br />";

    myTest();
    myTest();
    myTest();
    ?>

常量

<?php
    echo "<h1>常量</h1>";
    echo <<<eof
        <pre>
        // 區分大小寫的常量名
        define("GREETING", "歡迎訪問 Runoob.com");
        echo GREETING;    // 輸出 "歡迎訪問 Runoob.com"
        echo '<br>';
        echo greeting;   // 輸出 "greeting"
        </pre>
    eof;

    // 區分大小寫的常量名
    define("GREETING", "歡迎訪問 Runoob.com", false);
    echo GREETING;    // 輸出 "歡迎訪問 Runoob.com"
    echo '<br>';
    echo GREETING;   // 輸出 "greeting"

    /*
    echo <<<eof
    <pre>
    // 不區分大小寫的常量名
    define("GREETING", "歡迎訪問 Runoob.com", true);
    echo greeting;  // 輸出 "歡迎訪問 Runoob.com"
    </pre>
    eof;
    */
    // 不區分大小寫的常量名(以下代碼運行報錯,不贊成使用不區分大小寫的常量)
    //define("GREETING1", "歡迎訪問 Runoob.com", true);
    //echo greeting1;  // 輸出 "歡迎訪問 Runoob.com"



    echo <<<eof
    <h1>實際測試結果</h1>
    <p><b>最新的PHP版本中,常量一律都區分大小寫了!!!</b></p>
    eof;
    ?>

部分超級全局變量

<?php
echo <<<eof
   <h1>PHP超級全局變量</h1>
   超級全局變量在PHP 4.1.0之後被啓用, 是PHP系統中自帶的變量,在一個腳本的全部作用域中都可用。
   <br>
   <p>PHP中預定義了幾個超級全局變量(superglobals) ,這意味着它們在一個腳本的全部作用域中都可用。 你不需要特別說明,就可以在函數及類中使用。
   <br>
   PHP 超級全局變量列表:</p>
   <ul>
   <li>\$GLOBALS</li>
   <li>\$_SERVER</li>
   <li>\$_REQUEST</li>
   <li>\$_POST</li>
   <li>\$_GET</li>
   <li>\$_FILES</li>
   <li>\$_ENV</li>
   <li>\$_COOKIE</li>
   <li>\$_SESSION</li>
   </ul>
   <hr>
   
   <h1>\$GLOBALS</h1>
   該是PHP的一個超級全局變量組,在一個PHP腳本的全部作用域中都可以訪問。是一個包含了全部變量的全局組合數組。變量的名字就是數組的鍵。以下實例介紹瞭如何使用超級全局變量 \$GLOBALS:<br>
   <pre>
   \$num1 = 1; //定義一個變量num1<br>
   \$num2 = 2; //定義一個變量num2<br>
   //使用一個未定義變量result<br>
   \$GLOBALS['result'] = \$GLOBALS['num1']+\$GLOBALS['num2'];<br>
   </pre>
eof;

$num1 = 1;
$num2 = 2;
$GLOBALS['result'] = $GLOBALS['num1'] + $GLOBALS['num2'];
echo '使用GLOBALS訪問未定義變量result:', $GLOBALS['result'], '<br>使用result的變量名訪問:', $result, '<hr>';
?>
<h1>$_SERVER</h1>
<p>
   $_SERVER 是一個包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數組。這個數組中的項目由 Web 服務器創建。不能保證每個服務器都提供全部項目;服務器可能會忽略一些,或者提供一些沒有在這裏列舉出來的項目。<br>

   以下實例中展示瞭如何使用$_SERVER中的元素:
</p>
<pre>
echo $_SERVER['PHP_SELF'];

echo $_SERVER['SERVER_NAME'];

echo $_SERVER['HTTP_HOST'];

//echo $_SERVER['HTTP_REFERER'];

echo $_SERVER['HTTP_USER_AGENT'];

echo $_SERVER['SCRIPT_NAME'];
</pre>
<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo "變量_SERVER['HTTP_REFERER']未能正常辨認,已被註釋!";
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?>
<p>
   <b>
      注意:關於$_SERVER的其他項內容,請參考鏈接:
      <a href="https://www.runoob.com/php/php-superglobals.html">https://www.runoob.com/php/php-superglobals.html</a>
   </b>
</p>
<hr>

<h1>$_REQUEST</h1>
<p>
   PHP $_REQUEST 用於收集HTML表單提交的數據。
   <br>
   以下實例顯示了一個輸入字段(input)及提交按鈕(submit)的表單(form)。 當用戶通過點擊 "Submit" 按鈕提交表單數據時, 表單數據將發送至&lt;form>標籤中 action 屬性中指定的腳本文件。 在這個實例中,我們指定文件來處理表單數據。如果你希望其他的PHP文件來處理該數據,你可以修改該指定的腳本文件名。 然後,我們可以使用超級全局變量 $_REQUEST 來收集表單中的 input 字段數據
</p>

<hr>

<h1>$_POST</h1>
<p>
   PHP $_POST 被廣泛應用於收集表單數據,在HTML form標籤的指定該屬性:"method="post"。
   <br>
   以下實例顯示了一個輸入字段(input)及提交按鈕(submit)的表單(form)。 當用戶通過點擊 "Submit" 按鈕提交表單數據時, 表單數據將發送至<form>標籤中 action 屬性中指定的腳本文件。 在這個實例中,我們指定文件來處理表單數據。如果你希望其他的PHP文件來處理該數據,你可以修改該指定的腳本文件名。 然後,我們可以使用超級全局變量 $_POST 來收集表單中的 input 字段數據
</p>

特殊的數組——關聯數組

<?php
echo '<h1>特殊數組:關聯數組</h1>';
echo '傳統數組的key是自然數,又被稱爲角標;而關聯數組的key的名稱則是由數組初始化時所指定。<hr>';

$age = array("Peter" => "35", "Ben" => "37", "Joe" => "43");
echo "Peter is " . $age['Peter'] . " years old.";
echo '<br>';
foreach ($age as $x => $x_value) {
   echo "Key=" . $x . ", Value=" . $x_value;
   echo "<br>";
}

部分魔術常量

<!DOCTYPE html>
<html lang="zh">

<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>
</head>

<body>
   <h1>
      PHP 魔術常量
   </h1>
   <p>
      PHP 向它運行的任何腳本提供了大量的預定義常量。
      <br>
      不過很多常量都是由不同的擴展庫定義的,只有在加載了這些擴展庫時纔會出現,或者動態加載後,或者在編譯時已經包括進去了。
      <br>
      有八個魔術常量它們的值隨着它們在代碼中的位置改變而改變。
      <br>
      例如 __LINE__ 的值就依賴於它在腳本中所處的行來決定。這些特殊的常量不區分大小寫.
   </p>

   <h1>__LINE__</h1>
   <p>文件中的當前行號:</p>
   <?php
   echo "當前輸出語句所在第", __LINE__, "行";
   ?>

   <hr>
   <h1>__FILE__</h1>
   <p>
      文件的完整路徑和文件名。如果用在被包含文件中,則返回被包含的文件名。
      <br>PHP 4.0.2 起,__FILE__ 總是包含一個絕對路徑(如果是符號連接,則是解析後的絕對路徑),而在此之前的版本有時會包含一個相對路徑。
      <br>
      實例:
   </p>

   <?php
   echo "本文件名爲:", __FILE__;
   ?>
   <hr>

   <h1>__DIR__</h1>
   <p>
      文件所在的目錄。如果用在被包括文件中,則返回被包括的文件所在的目錄。
      <br>
      它等價於 dirname(__FILE__)。除非是根目錄,否則目錄中名不包括末尾的斜槓。(PHP 5.3.0中新增)
   </p>
   <?php
   echo "本文件所在文件夾的全路徑爲:", __DIR__;
   ?>
   <hr>
   <h1>__FUNCTION__</h1>
   <p>
      函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。
   </p>
   <?php
   function testFun()
   {
      echo "當前函數的函數名爲:", __FUNCTION__;
   }
   testFun();
   ?>

   <hr>


   <h1>__CLASS__</h1>
   <p>
      類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。
      <br>PHP 4 中該值總是小寫字母的。類名包括其被聲明的作用區域(例如 Foo\Bar)。注意自 PHP 5.4__CLASS__trait 也起作用。當用在 trait 方法中時,__CLASS__ 是調用 trait 方法的類的名字。
   </p>

   <?php
   class test
   {
      function _print()
      {
         echo '類名爲:'  . __CLASS__ . "<br>";
         echo  '函數名爲:' . __FUNCTION__;
      }
   }

   $newObj = new test();
   $newObj->_print();
   ?>

   <hr>

</body>

</html>

內置的數組排序功能

<?php
    $numbers = array(4, 6, 2, 22, 11);
    echo '<h1>升序排序函數sort</h1>';
    sort($numbers);
    for ($i = 0; $i < count($numbers); $i++) {
        echo $numbers[$i], '<br>';
    }
    echo '<h1>降序排序函數rsort</h1>';
    rsort($numbers);
    for ($i = 0; $i < count($numbers); $i++) {
        echo $numbers[$i], '<br>';
    }

    echo '<h1>對於關聯數組,按value升序排序asort</h1>';
    $age = array('Peter' => '35', 'Ben' => '37', 'Joe' => '43');
    asort($age);
    foreach ($age as $key => $value) {
        echo $key, ':', $value, '<br>';
    }

    echo '<h1>對於關聯數組,按key升序排序ksort</h1>';
    $age = array('Peter' => '35', 'Ben' => '37', 'Joe' => '43');
    ksort($age);
    foreach ($age as $key => $value) {
        echo $key, ':', $value, '<br>';
    }
    ?>

特殊的elseif

<?php
    echo '<h1>注意觀察源代碼中elseif的else與if之間是直接相連沒有使用空格隔開的</h1>';

    $t = date("H");
    if ($t < "10") {
        echo "Have a good morning!";
    } elseif ($t < "20") {
        echo "Have a good day!";
    } else {
        echo "Have a good night!";
    }
    ?>

面向對象部分

成員變量的申明部分需要額外注意與其他語言的區別

<?php
class phpClass
{
    public $var1;
    var $var2;
    //public var $var3; //這種定義會報錯

    public function __construct()
    {
        $var1 = 1;
        $var2 = 2;
        echo $var1,$var2;
    }

    public function __destruct()
    {
        echo "對象被銷燬<br>";
    }
}

//創建對象
$obj1 = new phpClass;
echo "<br>";
$obj2 = new phpClass();


//調用方法
echo "<br>";
//$obj1.__construct();//使用點的方式調用不了
$obj1->__construct();//只能通過指向方式調用
echo "<br>";
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章