php面向?qū)ο笙嚓P(guān)技術(shù)總結(jié)

php內(nèi)置標準類

  • 基本介紹

    php中有一個類 stdClass顿锰,不需要創(chuàng)建就可以使用,通撑堇可以使用它來以對象的形式管理我們的數(shù)據(jù)捂掰。

  • 代碼

    $person = new stdClass();
    $person->name = '悟空';
    $person->ability = '72變化';
    var_dump($person);
    echo 'name = ' . $person->name;
    

其它數(shù)據(jù)類型轉(zhuǎn)對象

  • 基本介紹

    在某些情況下,需要把其它的數(shù)據(jù)類型(int, float, array 等等)轉(zhuǎn)成對象形式想括、

  • 代碼

    $heros = array('no1' => '悟空', 'no2' => '八戒', 'no3' => '沙僧');
    $hero_obj = (object)$heros;
    var_dump($hero_obj);
    // object(stdClass)#1 (3) { ["no1"]=> string(6) "悟空" ["no2"]=> string(6) "八戒" ["no3"]=> string(6) "沙僧" } 
    
    $age = 90;
    $age_obj = (object)$age;
    var_dump($age_obj);
    // object(stdClass)#2 (1) { ["scalar"]=> int(90) }
    
    $null = null;
    $null_obj = (object)$null;
    var_dump($null_obj);
    // object(stdClass)#3 (0) { }
    

    因此將其它數(shù)據(jù)類型轉(zhuǎn)成對象時陷谱,將成為 stdClass 對象實例;

    如果是一個關(guān)聯(lián)數(shù)組,在轉(zhuǎn)成對象后會自動將 key 變成屬性名稱烟逊,將value 變成屬性的值渣窜;

    如果是 int,string宪躯,float 類型的乔宿,在轉(zhuǎn)成對象后,屬性名為scalar访雪,屬性值為轉(zhuǎn)成對象前的值详瑞;

    如果是 null,在轉(zhuǎn)成對象后變成空對象

對象轉(zhuǎn)字符串

__toString()方法用于一個類被當做字符串時應(yīng)怎樣回應(yīng)冬阳。

例如 echo $obj;應(yīng)該顯示什么。此方法必須返回一個字符串党饮,否則將發(fā)出一個致命錯誤肝陪。

小案例:

// 當 echo 對象名; 返回該類的相關(guān)信息,比如類名刑顺,所有函數(shù)和所有屬性
class Dog
{
    public $name;
    protected $age;
    private $lover;
    public function __construct($name, $age, $lover)
    {
        $this->name = $name;
        $this->age = $age;
        $this->lover = $lover;
    }
    protected function cry()
    {
        echo '汪汪叫';
    }
    // 魔術(shù)方法
    public function __toString()
    {
        // 使用反射類來實現(xiàn)
        $reflect_class = new ReflectionClass($this);
        echo '<br>類名 = ' . $reflect_class->getName();
        
        echo '<br>類的方法有:';
        $method_list = $reflect_class->getMethods();
        print_r($method_list);// 打印出對象數(shù)組
        // Array ( [0] => ReflectionMethod Object ( [name] => __construct [class] => Dog ) [1] => ReflectionMethod Object ( [name] => cry [class] => Dog ) [2] => ReflectionMethod Object ( [name] => __toString [class] => Dog ) ) 
        
        echo '<br>類的屬性有:';
        $property_list = $reflect_class->getProperties();
        print_r($property_list);// 打印出對象數(shù)組
        // Array ( [0] => ReflectionProperty Object ( [name] => name [class] => Dog ) [1] => ReflectionProperty Object ( [name] => age [class] => Dog ) [2] => ReflectionProperty Object ( [name] => lover [class] => Dog ) )
        
        // 如果取出 大黃狗
        echo '<br>' . $property_list[0]->getValue($this);
        return '';
    }
}
$dog = new Dog('大黃狗', 45, '小花狗');
// 需要輸出 Dog 類的相關(guān)信息
echo $dog;

trait

  • 基本介紹(手冊)

    ? 自 PHP 5.4.0 起氯窍,PHP 實現(xiàn)了代碼復(fù)用的一個方法,稱為 traits蹲堂。

    ? Traits 是一種為類似 PHP 的單繼承語言而準備的代碼復(fù)用機制狼讨。Trait 為了減少單繼承語言的限制,使開發(fā)人員能夠自由地在不同層次結(jié)構(gòu)內(nèi)獨立的類中復(fù)用方法集柒竞。Traits 和類組合的語義是定義了一種方式來減少復(fù)雜性政供,避免傳統(tǒng)多繼承和混入類(Mixin)相關(guān)的典型問題。

    ? Trait 和一個類相似朽基,但僅僅旨在用細粒度和一致的方式來組合功能布隔。Trait 不能通過它自身來實例化。它為傳統(tǒng)繼承增加了水平特性的組合稼虎;也就是說衅檀,應(yīng)用類的成員不需要繼承。

  • 代碼

    trait Abc
    {
        public function getSum($n1, $n2)
        {
            return $n1 + $n2;
        }
    }
    class A
    {
        // 引入Abc trait
        use Abc;
        public function test()
        {
            echo '<br> A test()';
        }
    }
    
    class B
    {
        public function getVal()
        {
            echo '<br> B getVal()';
        }
    }
    $a = new A();
    echo $a->getSum(10, 20);
    
  • traits細節(jié)說明:

    • trait不能被實例化霎俩;

    • 優(yōu)先級:如果我們的父類和trait有相同的方法時哀军,以trait定義的方法為準。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末打却,一起剝皮案震驚了整個濱河市杉适,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌柳击,老刑警劉巖淘衙,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異腻暮,居然都是意外死亡彤守,警方通過查閱死者的電腦和手機毯侦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來具垫,“玉大人侈离,你說我怎么就攤上這事◇莶希” “怎么了卦碾?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長起宽。 經(jīng)常有香客問我洲胖,道長,這世上最難降的妖魔是什么坯沪? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任绿映,我火速辦了婚禮,結(jié)果婚禮上腐晾,老公的妹妹穿的比我還像新娘叉弦。我一直安慰自己,他們只是感情好藻糖,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布淹冰。 她就那樣靜靜地躺著,像睡著了一般巨柒。 火紅的嫁衣襯著肌膚如雪樱拴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天洋满,我揣著相機與錄音疹鳄,去河邊找鬼。 笑死芦岂,一個胖子當著我的面吹牛瘪弓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播禽最,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼腺怯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了川无?” 一聲冷哼從身側(cè)響起呛占,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎懦趋,沒想到半個月后晾虑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年帜篇,在試婚紗的時候發(fā)現(xiàn)自己被綠了糙捺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡笙隙,死狀恐怖洪灯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情竟痰,我是刑警寧澤签钩,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站坏快,受9級特大地震影響铅檩,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜莽鸿,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一昧旨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧富拗,春花似錦臼予、人聲如沸鸣戴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽窄锅。三九已至创千,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間入偷,已是汗流浹背追驴。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疏之,地道東北人殿雪。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像锋爪,于是被迫代替她去往敵國和親丙曙。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容