僅記錄區別於我自己已學的其他語言語法存在差異之處。
兩種打印語句
拷貝代碼後自行運行查看效果即可
<?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" 按鈕提交表單數據時, 表單數據將發送至<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>";