PHP全棧學習筆記8

  • 時間:2019-06-11 02:55 作者:達叔小生 來源:達叔小生 閱讀:134
  • 掃一掃,手機訪問
摘要:PHP全棧學習筆記8面向對象的基本概念,面向對象編程,oop,面向對象,面向對象的分析,面向對象的設計,面向對象的編程,什么是類。類,屬性和方法,類,對象,面向對象編程的三大特點。特點,封裝性,繼承性,多態性。封裝性,也可以稱為信息隱藏。繼承性就是派生類(子類)自動繼承一個或者多個基類(父類)中的屬性
PHP全棧學習筆記8

面向對象的基本概念,面向對象編程,oop,面向對象,面向對象的分析,面向對象的設計,面向對象的編程,什么是類。

類,屬性和方法,類,對象,面向對象編程的三大特點。特點,封裝性,繼承性,多態性。

封裝性,也可以稱為信息隱藏。
繼承性就是派生類(子類)自動繼承一個或者多個基類(父類)中的屬性與方法,并可以重寫或者增加新的屬性或者方法。
多態性是指同一個類的不同對象,使用同一個方法可以取得不同的結果,這種技術稱為多態性。

類的定義,成員方法,類的實例化,成員變量,類常量,構造方法和析構方法,繼承和多態的實現,數據的隱藏,靜態變量。

類的定義:

<?phpclass SpoObject{            //定義類    //…}?>

成員方法:

<?php    class SportObject{        function beatBasketball()($name,$height,$avoirdupois,$age,$sex){    //公告成員方法            echo "姓名:".$name;   //方法實現的功能            }    }?>

類的實例化:

對象名 -> 成員方法

成員變量
類中的變量,也稱為成員變量

關鍵字 成員變量名
對象名 -> 成員變量

類常量
常量就是不會改變的量,是一個恒值。
定義常量使用關鍵字const
輸出格式:

類名::常量名

構造方法和析構方法

void __construct([mixed args [,…]])void __destruct ( void )

示例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>成員變量</title><style type="text/css"><!--body,td,th {    font-size: 12px;}body {    margin-left: 10px;    margin-top: 10px;    margin-right: 10px;    margin-bottom: 10px;}--></style></head><body><?phpclass SportObject{    public $name;                               //定義成員變量    public $height;                             //定義成員變量    public $avoirdupois;                        //定義成員變量        public function bootFootBall($name,$height,$avoirdupois){               //公告成員方法        $this->name=$name;        $this->height=$height;        $this->avoirdupois=$avoirdupois;        if($this->height<185 and $this->avoirdupois<85){            return $this->name.",符合踢足球的要求!";            //方法實現的功能        }else{            return $this->name.",不符合踢足球的要求!";           //方法實現的功能        }    }}$sport=new SportObject();           //實例化類,并傳遞參數echo $sport->bootFootBall('1','185','80');                              //執行類中的方法?></body></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>成員方法</title><style type="text/css"><!--body,td,th {    font-size: 12px;}body {    margin-left: 10px;    margin-top: 10px;    margin-right: 10px;    margin-bottom: 10px;}--></style></head><body><?php    class SportObject{        function beatBasketball($name,$height,$avoirdupois,$age,$sex){              //公告成員方法            if($height>180 and $avoirdupois<=100){                return $name.",符合打籃球的要求!";          //方法實現的功能            }else{                return $name.",不符合打籃球的要求!";         //方法實現的功能            }        }    }    $sport=new SportObject();    echo $sport->beatBasketball('1','185','80','20周歲','男');?></body></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>常量</title><style type="text/css"><!--body,td,th {    font-size: 12px;}body {    margin-left: 10px;    margin-top: 10px;    margin-right: 10px;    margin-bottom: 10px;}--></style></head><body><?phpclass SportObject{    const BOOK_TYPE = '計算機圖書';    public $object_name;                        //圖書名稱    function setObjectName($name){              //公告方法setObjectName()        $this -> object_name = $name;           //設置成員變量值    }    function getObjectName(){                   //公告方法getObjectName()        return $this -> object_name;    }}$c_book = new SportObject();                        //實例化對象$c_book -> setObjectName("PHP類");               //調用方法setObjectNameecho SportObject::BOOK_TYPE."->";                   //輸出常量BOOK_TYPEecho $c_book -> getObjectName();                //調用方法getObjectName?></body></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>構造方法</title><style type="text/css"><!--body,td,th {    font-size: 12px;}body {    margin-left: 10px;    margin-top: 10px;    margin-right: 10px;    margin-bottom: 10px;}--></style></head><body><?phpclass SportObject{    public $name;                               //定義成員變量    public $height;                             //定義成員變量    public $avoirdupois;                        //定義成員變量    public $age;                                //定義成員變量    public $sex;                                //定義成員變量    public function __construct($name,$height,$avoirdupois,$age,$sex){              //定義構造方法        $this->name=$name;                      //為成員變量賦值        $this->height=$height;                  //為成員變量賦值        $this->avoirdupois=$avoirdupois;        //為成員變量賦值        $this->age=$age;                        //為成員變量賦值        $this->sex=$sex;                        //為成員變量賦值    }    public function bootFootBall(){             //公告成員方法        if($this->height<185 and $this->avoirdupois<85){            return $this->name.",符合踢足球的要求!";            //方法實現的功能        }else{            return $this->name.",不符合踢足球的要求!";           //方法實現的功能        }    }}$sport=new SportObject('1','185','80','20','男');            //實例化類,并傳遞參數echo $sport->bootFootBall();                                //執行類中的方法?></body></html>

析構方法,是對象被銷毀時被調用的,作用是釋放內存。

void __destruct ( void )
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>析構方法</title></head><body><?phpclass SportObject{    public $name;                               //定義成員變量    public $height;                             //定義成員變量    public $avoirdupois;                        //定義成員變量    public $age;                                //定義成員變量    public $sex;                                //定義成員變量    public function __construct($name,$height,$avoirdupois,$age,$sex){              //定義構造方法        $this->name=$name;                      //為成員變量賦值        $this->height=$height;                  //為成員變量賦值        $this->avoirdupois=$avoirdupois;        //為成員變量賦值        $this->age=$age;                        //為成員變量賦值        $this->sex=$sex;                        //為成員變量賦值    }    public function bootFootBall(){             //公告成員方法        if($this->height<185 and $this->avoirdupois<85){            return $this->name.",符合踢足球的要求!";            //方法實現的功能        }else{            return $this->name.",不符合踢足球的要求!";           //方法實現的功能        }    }    function __destruct(){        echo "<p><b>對象被銷毀,調用析構函數。</b></p>";    }}$sport=new SportObject('1','185','80','20','男');            //實例化類,并傳遞參數//unset($sport);    ?></body></html>

繼承和多態的實現

所有成員變量和方法
構造函數
先調用子類中的方法
去調用父類中的構造方法

class subClass extends superClass{…}

多態存在兩種形式:覆蓋和重載。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>繼承的實現</title><style type="text/css"></head><body><?php/*  父類  */class SportObject{    public $name;                               //定義姓名成員變量    public $age;                                //定義年齡成員變量    public $avoirdupois;                        //定義體重成員變量    public $sex;                                //定義性別成員變量    public function __construct($name,$age,$avoirdupois,$sex){              //定義構造方法        $this->name=$name;                      //為成員變量賦值        $this->age=$age;                        //為成員變量賦值        $this->avoirdupois=$avoirdupois;        //為成員變量賦值        $this->sex=$sex;                        //為成員變量賦值    }    function showMe(){                          //定義方法        echo '這句話不會顯示。';    }}/*  子類BeatBasketBall  */class BeatBasketBall extends SportObject{               //定義子類,繼承父類    public $height;                                     //定義身高成員變量    function __construct($name,$height){                //定義構造方法        $this -> height = $height;                      //為成員變量賦值        $this -> name = $name;                          //為成員變量賦值    }    function showMe(){                                  //定義方法        if($this->height>185){            return $this->name.",符合打籃球的要求!";            //方法實現的功能        }else{            return $this->name.",不符合打籃球的要求!";           //方法實現的功能        }    }}/*  子類WeightLifting  */class WeightLifting extends SportObject{                        //繼承父類    function showMe(){                                          //定義方法        if($this->avoirdupois<85){            return $this->name.",符合舉重的要求!";             //方法實現的功能        }else{            return $this->name.",不符合舉重的要求!";            //方法實現的功能        }    }}//實例化對象$beatbasketball = new BeatBasketBall('','190');             //實例化子類$weightlifting = new WeightLifting('','185','80','20','男');echo $beatbasketball->showMe()."<br>";                          //輸出結果echo $weightlifting->showMe()."<br>";?></body></html>

繼承的實現

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>繼承的實現</title><style type="text/css"></head><body><?php/*  父類  */class SportObject{    public $name;                               //定義姓名成員變量    public $age;                                //定義年齡成員變量    public $avoirdupois;                        //定義體重成員變量    public $sex;                                //定義性別成員變量    public function __construct($name,$age,$avoirdupois,$sex){              //定義構造方法        $this->name=$name;                      //為成員變量賦值        $this->age=$age;                        //為成員變量賦值        $this->avoirdupois=$avoirdupois;        //為成員變量賦值        $this->sex=$sex;                        //為成員變量賦值    }    function showMe(){                          //定義方法        echo '這句話不會顯示。';    }}/*  子類BeatBasketBall  */class BeatBasketBall extends SportObject{               //定義子類,繼承父類    public $height;                                     //定義身高成員變量    function __construct($name,$height){                //定義構造方法        $this -> height = $height;                      //為成員變量賦值        $this -> name = $name;                          //為成員變量賦值    }    function showMe(){                                  //定義方法        if($this->height>185){            return $this->name.",符合打籃球的要求!";            //方法實現的功能        }else{            return $this->name.",不符合打籃球的要求!";           //方法實現的功能        }    }}/*  子類WeightLifting  */class WeightLifting extends SportObject{                        //繼承父類    function showMe(){                                          //定義方法        if($this->avoirdupois<85){            return $this->name.",符合舉重的要求!";             //方法實現的功能        }else{            return $this->name.",不符合舉重的要求!";            //方法實現的功能        }    }}//實例化對象$beatbasketball = new BeatBasketBall('','190');             //實例化子類$weightlifting = new WeightLifting('','185','80','20','男');echo $beatbasketball->showMe()."<br>";                          //輸出結果echo $weightlifting->showMe()."<br>";?></body></html>

重載:
傳遞的參數個數不同,調用不同的方法,返回不同的值。

<?php     class C{        function __call($name,$num){        //調用不存在的方法        echo "方法名稱:" . $name . "<p>";       //輸出方法名        echo "參數存在個數:" . count($num) . "<p>";   //輸出參數個數            if (count($num) == 1){  //根據參數個數調用不同的方法                echo $this->list1($a);              }            if (count($num) == 2){  //根據參數個數調用不同的方法                echo $this->list2($a,$b);            }        }        public function list1($a){      //定義方法            return "這是list1函數";        }        public function list2($a,$b){   //定義方法            return "這是list2函數";        }    }$a = new C;                 //類的實例化$a->listshow(1,2);              //調用方法,傳遞參數?>
關鍵字::變量名/常量名/方法名
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>偽變量$this</title></head><body><?php    class example{        function exam(){            if(isset($this)){                echo '$this的值為:'.get_class($this);            }else{                echo '$this未定義';            }        }    }    $class_name = new example();    $class_name->exam();?></body></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>“::”操作符</title></head><body><?phpclass Book{    const NAME = 'computer';                            //常量NAME    function __construct(){                             //構造方法        echo '本月圖書類冠軍為:'.Book::NAME.' ';        //輸出默認值    }}class l_book extends Book{                              //Book類的子類    const NAME = 'foreign language';                    //公告常量    function __construct(){                             //子類的構造方法        parent::__construct();                          //調用父類的構造方法        echo '本月圖書類冠軍為:'.self::NAME.' ';        //輸出本類中的默認值    }}$obj = new l_book();                                    //實例化對象?></body></html>

parent: 可以調用父類中的成員變量,成員方法和常量。

self:可以調用當前類中的靜態成員和常量。

類名:可以調用本類中的變量,常量和方法。

數據隱藏

public(公共成員)
private(私有成員)
protected(保護成員)

public, private, protected, static, final

靜態變量(方法)

關鍵字::靜態成員
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>private關鍵字</title></head><body><?phpclass Book{    private $name = 'computer';                         //公告私有變量$name    public function setName($name){                     //設置私有變量        $this -> name = $name;    }    public function getName(){                          //讀取私有變量        return $this -> name;    }}class LBook extends Book{                               //Book類的子類  }$lbook = new LBook();                                   //實例化對象echo '正確操作私有變量的方法:';$lbook -> setName("PHP");                   //對私有變量進行操作echo $lbook -> getName();echo '<br>直接操作私有變量的結果:';                    //對私有變量進行操作echo Book::$name;?></body></html>

private只能在所屬類的內部被調和修改,不可以在類外被訪問。

protected修飾的類成員,可以在本類和子類中被調用,其余地方不可以被調用。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>protected關鍵字</title></head><body><?phpclass Book{    protected $name = 'computer';                       //公告保護變量$name}class LBook extends Book{                               //Book類的子類    public function showMe(){        echo '對于protected修飾的變量,在子類中是可以直接調用的。如:$name = '.$this -> name;    }}$lbook = new LBook();                                   //實例化對象$lbook -> showMe();echo '<p>但在其余的地方是不可以調用的,否則:';           //對私有變量進行操作$lbook -> name = 'history';?></body></html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>protected關鍵字</title></head><body><?phpclass Book{    protected $name = 'computer';                       //公告保護變量$name}class LBook extends Book{                               //Book類的子類    public function showMe(){        echo '對于protected修飾的變量,在子類中是可以直接調用的。如:$name = '.$this -> name;    }}$lbook = new LBook();                                   //實例化對象$lbook -> showMe();echo '<p>但在其余的地方是不可以調用的,否則:';           //對私有變量進行操作$lbook -> name = '會報錯,這里就錯了';?></body></html>

靜態變量:

關鍵字::靜態成員

self,在類內部調用 靜態成員所使用

在靜態方法中,只能調用靜態變量,不能調用普通變量,而普通方法可以調用靜態變量。

對象被銷毀后,依然保存被修改的靜態數據。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>靜態變量的使用</title></head><body><?phpclass Book{                                     //Book類    static $num = 0;                            //公告一個靜態變量$num,初值為0    public function showMe(){                   //申明一個方法        echo '您是第'.self::$num.'位訪客';        //輸出靜態變量        self::$num++;                           //將靜態變量加1    }}$book1 = new Book();                            //實例化對象$book1$book1 -> showMe();                             //調用showMe()方法echo "<br>";$book2 = new Book();                            //實例化對象$book2;$book2 -> showMe();                             //再次調用showMe()方法echo "<br>";echo '您是第'.Book::$num.'為訪客';                //直接使用類名調用靜態變量?></body></html>

運行效果是:

您是第0位訪客
您是第1位訪客
您是第2位訪客

對象的高級應用

final關鍵字,籠統類,接口的使用,克隆對象,對象比較,對象類型檢測,魔術方法。

不可以被繼承,不能有子類final class class_name{//…}final function method_name() 不可以重寫和覆蓋
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>final類</title>></head><body><?php    final class SportObject{        function  __construct(){            echo '不能被繼承,不能有子類';        }    }    class MyBook extends SportObject{        static function exam(){            echo "會報錯的";        }    }    MyBook::exam();?></body></html>

籠統類,是不能被實例化的類,只能作為父類來使用:

abstract class AbstractName{…}

籠統類,一樣有成員變量,成員方法,籠統類至少包含一個籠統方法,籠統方法沒有方法體,其功能在子類完成。

abstract function abstractName();
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>籠統類</title></head><body><?php    abstract class CommodityObject{                         //定義籠統類        abstract function service($getName,$price,$num);    //定義籠統方法    }    class MyBook extends CommodityObject{               //定義子類,繼承籠統類        function service($getName,$price,$num){     //定義方法            echo '您購買的商品是'.$getName.',該商品的價格是:'.$price.' 元。';            echo '您購買的數量為:'.$num.' 本。';            echo '如發現缺頁,請在3日內更換。';        }    }    class MyComputer extends CommodityObject{           //定義子類繼承父類        function service($getName,$price,$num){         //定義方法            echo '您購買的商品是'.$getName.',該商品的價格是:'.$price.' 元。';            echo '您購買的數量為:'.$num.' 臺。';            echo '如發生非人為質量問題,請在3個月內更換。';        }    }    $book = new MyBook();                   //實例化子類    $computer = new MyComputer();           //實例化子類    $book -> service('PHP',5,3);    //調用方法    echo '<p>';    $computer -> service('XX本',800,1);      //調用方法        ?></body></html>

接口

interface InterfaceName{    function interfaceName1();    function interfaceName2();    …}class SubClass implements InterfaceName1,InterfaceName2{    function interfaceName1(){  //功能實現}    function interfaceName2(){  //功能實現}    …}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>接口</title></head><body><?php    interface MPopedom{        function popedom();    }    interface MPurview{        function purview();    }    class Member implements MPurview{        function purview(){            echo '會員';        }    }    class Manager implements MPurview,MPopedom{        function purview(){            echo '管理員擁有一律權限。';        }        function popedom(){            echo '管理員還沒有的權限';        }    }    $member = new Member();    $manager = new Manager();    $member -> purview();    echo '<p>';    $manager -> purview();    $manager ->popedom();?></body></html>

克隆對象

$object1 = new ClassName();$object2 = clone $object1;

__clone()方法,調用__clone()方法,可以克隆出來的對象的少量行為及屬性

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>對象的引用</title></head><body><?phpclass SportObject{                                  //類SportObject    private $object_type = 'book';              //公告私有變量$object_type,并賦初值等于“book”    public function setType($type){             //公告成員方法setType,為變量$object_type賦值        $this -> object_type = $type;    }    public function getType(){                  //公告成員方法getType,返回變量$object_type的值        return $this -> object_type;    }}$book1 = new SportObject();                     //實例化對象$book1$book2 = $book1;                                //使用普通數據類型的方法給對象$book2賦值$book2 -> setType('computer');                  //改變對象$book2的值echo '對象$book1的值為:'.$book1 -> getType();    //輸出對象$book1的值?></body></html>

對象比較
兩個等號“==”是比較兩個對象的內容
3個等號“===”是比較對象的引用地址

對象類型檢測
instanceof操作符可以檢測當前對象是屬于哪個類

ObjectName instanceof ClassName

魔術方法

__construct()、__destruct()和__clone()__set()和__get()方法__call()方法__sleep()和__wakeup()方法__toString()方法__autoload()方法

__call()方法包含兩個參數,即方法名和方法參數
方法參數是以數組形式存在的

_set()方法包含兩個參數,分別表示變量名稱和變量值

__get()方法有一個參數,表示要調用的變量名

使用serialize()函數可以實現序列化對象
unserialize()函數可以重新復原一個被serialize()函數序列化的對象

__sleep()方法可以清理對象并返回一個該對象中所有變量的數組

__wakeup()方法則是恢復在序列化中可能丟失的數據庫連接及相關工作

__toString()方法將對象轉化為字符串

對象的比較

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>對象的比較</title></head><body><?php    class SportObject{        private $name;        function __construct($name){            $this -> name = $name;        }    }    $book = new SportObject('book');    $cloneBook = clone $book;    $referBook = $book;    if($cloneBook == $book){        echo '兩個對象的內容相等<br>';    }    if($referBook === $book){        echo '兩個對象的引用地址相等<br>';    }?></body></html>

對象的比較

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>對象的比較</title></head><body><?php    class SportObject{        private $name;        function __construct($name){            $this -> name = $name;        }    }    $book = new SportObject('book');    $cloneBook = clone $book;    $referBook = $book;    if($cloneBook == $book){        echo '兩個對象的內容相等<br>';    }    if($referBook === $book){        echo '兩個對象的引用地址相等<br>';    }?></body></html>

對象類型檢測

instanceof操作符可以檢測當前對象是屬于哪個類

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>對象類型檢測</title></head><body><?phpclass SportObject{}class MyBook extends SportObject{    private $type;}$cBook = new MyBook();if($cBook instanceof MyBook)    echo '對象$cBook屬于MyBook類<br>';if($cBook instanceof SportObject)    echo '對象$cBook屬于SportObject類<br>';?></body></html>

測試結果:

對象$cBook屬于MyBook類對象$cBook屬于SportObject類

魔術方法:
__set()和__get()方法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>__set()和__get()方法</title></head><body><?phpclass SportObject{    private $type = ' ';    public function getType(){        return $this -> type;    }    private function __get($name){        if(isset($this ->$name)){            echo '變量'.$name.'的值為:'.$this -> $name.'<br>';        }        else{            echo '變量'.$name.'未定義,初始化為0<br>';            $this -> $name = 0;        }    }    private function __set($name, $value){        if(isset($this -> $name)){            $this -> $name = $value;                echo '變量'.$name.'賦值為:'.$value.'<br>';        }else{            $this -> $name = $value;            echo '變量'.$name.'被初始化為:'.$value.'<br>';        }    }}$MyComputer = new SportObject();$MyComputer -> type = 'DIY';$MyComputer -> type;$MyComputer -> name;?> </body></html>

變量type賦值為:DIY
變量type的值為:DIY
變量name未定義,初始化為0
變量name被初始化為:0

__call()方法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>__call()方法</title></head><body><?phpclass SportObject{    public function myDream(){        echo '調用的方法存在,直接執行此方法。<p>';    }    public function __call($method, $parameter)    {        echo '假如方法不存在,則執行__call()方法。<br>';        echo '方法名為:'.$method.'<br>';        echo '參數有:';        var_dump($parameter);    }}$MyLife = new SportObject();$MyLife -> myDream();$MyLife -> mDream('how','what','why');?> </body></html>

__sleep()和__wakeup()方法

__sleep()方法可以清理對象并返回一個包含對象中所有變量的數組。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>__sleep()和__wakeup()方法</title></head><body><?phpclass SportObject{    private $type = 'DIY';    public function getType(){        return $this -> type;    }    public function __sleep(){        echo '使用serialize()函數將對象保存起來,可以存放到文本文件、數據庫等地方<br>';        return $this;    }    public function __wakeup(){        echo '當需要該數據時,使用unserialize()函數對已序列化的字符串進行操作,將其轉換回對象<br>';    }}$myBook = new SportObject();$i = serialize($myBook);echo '序列化后的字符串:'.$i.'<br>';$reBook = unserialize($i);echo '復原后的成員變量:'.$reBook -> getType();?> </body></html>

__toString()方法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>__toString()方法</title></head><body><?phpclass SportObject{    private $type = 'DIY';    public function __toString(){        return $this -> type;    }}$myComputer = new SportObject();echo '對象$myComputer的值為:';echo  $myComputer;?> </body></html>

__autoload()方法自動實例化需要使用的類

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>__autoload()方法自動實例化需要使用的類</title></head><body><?php    function __autoload($class_name){        $class_path = $class_name.'.class.php';        if(file_exists($class_path)){            include_once($class_path);        }else            echo '類路徑錯誤。';    }    $myBook = new SportObject("江山代有人才出 各領風騷數百年");    echo $myBook;?></body></html><?phpclass SportObject{    private $cont;    public function __construct($cont){        $this -> cont = $cont;    }    public function __toString(){        return $this -> cont;    }}?>

中文字符串的截取類

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>中文字符串的截取類</title></head><body><?php class MsubStr{    function csubstr($str, $start, $len) {              //$str指的是字符串,$start指的是字符串的起始位置,$len指的是長度。    $strlen = $start + $len;                            //用$strlen存儲字符串的總長度(從字符串的起始位置到字符串的總長度)    for($i = 0; $i < $strlen; $i ++) {                  //通過for循環語句,循環讀取字符串        if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) {    //假如字符串中首個字節的ASCII序數值大于0xa0,則表示為漢字            $tmpstr .= substr ( $str, $i, 2 );          //每次取出兩位字符賦給變量$tmpstr,即等于一個漢字            $i ++;                                      //變量自加1        } else {                                        //假如不是漢字,則每次取出一位字符賦給變量$tmpstr            $tmpstr .= substr ( $str, $i, 1 );        }    }    return $tmpstr;                                     //輸出字符串    }}$mc=new MsubStr();                                      //類的實例化?> <table width="204" height="195" border="0" cellpadding="0" cellspacing="0" background="images/bg.JPG">  <tr>    <td width="25" height="37">&nbsp;</td>    <td width="157">&nbsp;</td>    <td width="22">&nbsp;</td>  </tr>  <tr>    <td height="30">&nbsp;</td>    <td><?php             $string="關注!";            if(strlen($string)>10){                echo substr($string,0,9)."...";            }else{                echo $string;            }        ?>    </td>    <td>&nbsp;</td>  </tr>  <tr>    <td height="30">&nbsp;</td>    <td><?php             $string="關注";            if(strlen($string)>10){                echo substr($string,0,9)."...";            }else{                echo $string;            }        ?></td>    <td>&nbsp;</td>  </tr>  <tr>    <td height="30">&nbsp;</td>    <td>        <?php             $strs="關注";            if(strlen($string)>10){                echo $mc ->csubstr($strs, "0" , "9")."...";            }else{                echo $strs;            }        ?>    </td>    <td>&nbsp;</td>  </tr>  <tr>    <td height="30">&nbsp;</td>    <td><?php             $strs="關注";            if(strlen($string)>30){                echo $mc ->csubstr($strs, "0" , "20")."...";            }else{                echo $strs;            }        ?>    </td>    <td>&nbsp;</td>  </tr>  <tr>    <td height="38">&nbsp;</td>    <td>&nbsp;</td>    <td>&nbsp;</td>  </tr></table></body></html><?php class MsubStr{    function csubstr($str, $start, $len) { //$str指的是字符串,$start指的是字符串的起始位置,$len指的是長度。    $strlen = $start + $len; //用$strlen存儲字符串的總長度(從字符串的起始位置到字符串的總長度)    for($i = 0; $i < $strlen; $i ++) { //通過for循環語句,循環讀取字符串        if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) { //假如字符串中首個字節的ASCII序數值大于0xa0,則表示為漢字            $tmpstr .= substr ( $str, $i, 2 ); //每次取出兩位字符賦給變量$tmpstr,即等于一個漢字            $i ++; //變量自加1        } else { //假如不是漢字,則每次取出一位字符賦給變量$tmpstr            $tmpstr .= substr ( $str, $i, 1 );        }    }    return $tmpstr; //輸出字符串}}?>
<?phpclass changecode{    private $str;    private $input;    private $output;    function __construct($input='',$output='gb2312'){        $this->input = $input;        $this->output = $output;    }    protected function chgcode($str){        if($this->input != ''){            $this->str = iconv($input,$output,$str);        }else{            $this->str = mb_convert_encoding($str,$output);        }    }    function getStr($str){        $this->chgcode($str);        return $this->str;    }    function setInput($input){        $this->input = $input;    }    function setOutput($output){        $this->output = $output;    }    function getInput(){        return $this->input;    }    function getOutput(){        return $this->output;    }}?>

結言

好了,歡迎在留言區留言,與大家分享你的經驗和心得。

感謝你學習今天的內容,假如你覺得這篇文章對你有幫助的話,也歡迎把它分享給更多的朋友,感謝。

感謝!承蒙關照!您真摯的贊嘆是我前進的最大動力!

imageimage 上一篇 目錄 已是最后
  • 全部評論(0)
最新發布的資訊信息
【系統環境|服務器應用】Discuz隱藏后臺admin.php網址修改路徑(2019-12-15 14:52)
【系統環境|服務器應用】Discuz發布帖子時默認顯示第一個主題分類的修改方法(2019-12-09 00:13)
【系統環境|軟件環境】Android | App內存優化 之 內存泄漏 要點概述 以及 處理實戰(2019-12-04 14:27)
【系統環境|軟件環境】MySQL InnoDB 事務(2019-12-04 14:26)
【系統環境|軟件環境】vue-router(單頁面應用控制中心)常見用法(2019-12-04 14:26)
【系統環境|軟件環境】Linux中的Kill命令(2019-12-04 14:26)
【系統環境|軟件環境】Linux 入門時必學60個文件解決命令(2019-12-04 14:26)
【系統環境|軟件環境】更新版ThreeJS 3D粒子波浪動畫(2019-12-04 14:26)
【系統環境|軟件環境】前臺開發WebStorm常用快捷鍵,火速收藏!(2019-12-04 14:25)
【系統環境|軟件環境】微博H5登錄和發微博組件(2019-12-04 14:25)
手機二維碼手機訪問領取大禮包
返回頂部
3d开机号查询