PHP類與物件導向

來源:互聯網
上載者:User

標籤:

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類與物件導向

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.