標籤:
PHP常量
PHP常量大寫
PHP常量用define函數或const關鍵字定義
一個常量一旦被定義,就不能再改變或者取消定義。
在 PHP 5.3.0 以後,可以使用 const 關鍵字在類定義之外定義常量。
預定義常量:
__LINE__
__FILE__
define("FOO1", "something1");define("FOO2", "something2");define("FOO3", "something3");const CONSTANT = ‘FOO‘;echo FOO1;echo ‘<br/>‘;echo FOO2;echo ‘<br/>‘;echo FOO3;echo ‘<br/>‘;echo CONSTANT;
PHP5魔術常量
__LINE__,檔案中的當前行號
__FILE__,檔案的完整路徑和檔案名稱
__DIR__,檔案所在的目錄
__FUNCTION__,函數名稱
__CLASS__,類的名稱
__TRAIT__,Trait的名字
__METHOD__,類的方法名
__NAMESPACE__,當前命名空間的名稱
header(‘Content-Type: text/html; charset=utf-8‘);echo ‘魔術常量‘;echo ‘<br/>‘;echo ‘當前行號:‘.__LINE__;echo ‘<br/>‘;echo ‘檔案的完整路徑和檔案名稱:‘.__FILE__;echo ‘<br/>‘;echo ‘檔案所在的目錄:‘.__DIR__;echo ‘<br/>‘;function my_test() { echo ‘當前函數的名字:‘.__FUNCTION__;}my_test();echo ‘<br/>‘;class my_class { public $name = __CLASS__;}$my_class = new my_class();echo ‘當前類的名字:‘.$my_class -> name;echo ‘<br/>‘;
PHP運算子
PHP控制語句
$a = 5;$b = 3;if ($a > $b)echo "a is bigger than b";
$people = Array( Array(‘name‘ => ‘namea‘, ‘salt‘ => 1111), Array(‘name‘ => ‘nameb‘, ‘salt‘ => 2222));for($i = 0, $size = sizeof($people); $i < $size; $i++) { $people[$i][‘salt‘] = rand(0000, 9999);}var_dump($people);
$arr = array(1, 2, 3, 4);foreach($arr as &$value) { // 必須寫引用,不然執行下面代碼塊的東西會報錯 $value = $value * 2; echo $value .‘<br/>‘;}var_dump($arr);echo ‘<br/>‘;unset($value); // 取消掉引用var_dump($arr);
break語句
break 結束當前 for,foreach,while,do-while 或者 switch 結構的執行。 break 可以接受一個可選的數字參數來決定跳出幾重迴圈。
break 可以接受參數,停止幾個結構的執行,預設是1
$arr = array(‘one‘, ‘two‘, ‘three‘, ‘four‘, ‘stop‘, ‘five‘);while (list(, $var) = each($arr)) { if ($var == ‘stop‘) { break; } echo "$var<br/>";}$i = 0;while(++$i) { switch($i) { case 5: echo ‘At 5 <br/>‘; break 1; // 只退出switch case 10: echo ‘At 10 <br/>‘; break 2; // 退出switch和while default: break; }}
continue 接受一個可選的數字參數來決定跳過幾重迴圈到迴圈結尾。預設值是 1
declare語句
什麼是低級語句呢?它包括:
簡單語句:空語句(就一個;號),return, break, continue, throw, goto, global, static, unset, echo, 內建的HTML文本,分號結束的運算式等均算一個語句。
複合陳述式:完整的if/elseif, while, do...while, for, foreach, switch, try...catch等算一個語句。
語句塊:{} 括出來的語句塊。
最後特別的:declare塊本身也算一個語句(按道理declare塊也算是複合陳述式,但此處特意將其獨立出來)。
declare(ticks=1); // 低級語句// A function called on each tick eventfunction tick_handler(){ echo "tick_handler() called<br/>"; // 低級語句}register_tick_function(‘tick_handler‘); // 低級語句$a = 1; // 低級語句if ($a > 0) { $a += 2; // 低級語句 print($a); // 低級語句}
function do_tick(){ echo "<b style=‘color:red;‘>do_tick_function</b><br>";}register_tick_function(‘do_tick‘);declare(ticks = 1){ for($i = 1; $i < 5; $i++) { echo "<b style=‘color:blue;‘>{$i}</b><br>"; }}
include 語句包含並運行指定檔案。沒找到只會發出一條警告。
require 沒找到會發生一個致命的錯誤
vars.php
$color = ‘green‘;$fruit = ‘apple‘;
test.php
echo "A $color $fruit";include ‘vars.php‘;echo "A $color $fruit";
php 函數
(和js函數基本雷同)
類與對象
class A { function foo() { if(isset($this)) { echo ‘$this is defined‘ . get_class($this); // get_class()返回類名 } else { echo ‘$this is not defined‘; } }}$a = new A();$a -> foo();
繼承
PHP不支援多重繼承,一個類只能繼承一個基類。
被繼承的方法和成員可以通過用同樣的名字重新聲明被覆蓋,除非父類定義方法時使用了 final 關鍵字。可以通過 parent:: 來訪問被覆蓋的方法或成員。
class SimpleClass { // 成員聲明 public $var = ‘a default value‘; // 方法聲明 public function displayVar() { echo $this->var; echo ‘<br/>‘; }}$simple_class = new SimpleClass();$simple_class -> displayVar();class ExtendClass extends SimpleClass { // 重寫父類方法 function displayVar() { echo ‘extend class: ‘; parent::displayVar(); // TODO: Change the autogenerated stub }}$extended = new ExtendClass();$extended -> displayVar();
屬性修飾符:public,protected,private
類常量
// 類常量class MyClass { const CONSTANT = ‘constant value‘; // PHP5.3.0之後 const bar = <<<‘EOT‘ BAREOT; public function showConstant() { echo self::CONSTANT.‘<br/>‘; }}$my_class = new MyClass();$my_class -> showConstant();// 直接存取類常量echo MyClass::CONSTANT;echo ‘<br/>‘;// PHP5.3.0之後echo $my_class::CONSTANT;echo ‘<br/>‘;echo MyClass::bar;
自動載入類
很多開發人員寫物件導向的應用程式時,對每個類的定義建立一個PHP 源檔案。一個很大
的煩惱是不得不在每個指令碼(每個類一個檔案)開頭寫一個長長的包含檔案的列表。
在軟體開發的系統中,不可能把所有的類都寫在一個PHP 檔案中,當在一個PHP 檔案
中需要調用另一個檔案中聲明的類時,就需要通過include 把這個檔案引入。不過有的時候,
在檔案眾多的項目中,要一一將所需類的檔案都include 進來,是一個很讓人頭疼的事,所以
我們能不能在用到什麼類的時候,再把這個類所在的PHP 檔案匯入呢?這就是我們這裡我們
要講的自動載入類。
在PHP5 中,可以定義一個__autoload()函數,它會在試圖使用尚未被定義的類時自動調
用,通過調用此函數,指令碼引擎在PHP 出錯失敗前有了最後一個機會載入所需的類,
__autoload()函數接收的一個參數,就是你想載入的類的類名,所以你做項目時,在組織定義
類的檔案名稱時,需要按照一定的規則,最好以類名為中心,也可以加上統一的首碼或尾碼形
成檔案名稱,比如xxx_classname.php、classname_xxx.php 以及就是classname.php 等等。
本例嘗試分別從MyClass1.php 和MyClass2.php 檔案中載入MyClass1 和MyClass2 類
MyClass1.php
class MyClass1 { public function className() { echo get_class($this); }}
MyClass2.php
class MyClass2 { public function className() { echo get_class($this); }}
demo01.php
// 自動載入類function __autoload($class_name){ require_once $class_name . ‘.php‘;}$obj = new MyClass1();$obj2 = new MyClass2();$obj->className();echo ‘<br/>‘;$obj2->className();
PHP類與物件導向