初學 PHP 總結建立物件

ㅤㅤ發表於2018-10-21

例1.
這是一個入門級的建立物件的方法.

<?php

class User{
    public $name = '青風百里';
    public $age = '27';
    public $sex = '男';

    public function show(){
        return $this->name.'有'.$this->age.'歲,性別是'.$this->sex;
    }
}

$user = new User();
echo $user->show();

file

例2.
將類名放到一個變數$className中,new物件的時候,不直接寫字串,而是寫一個變數.
我覺得這樣做的好處在於提高了建立物件的靈活性,我給$className傳遞什麼字串,就可以建立出什麼物件,正所謂以不變應萬變.

<?php

class User{
    public $name = '青風百里';
    public $age = '27';
    public $sex = '男';

    public function show(){
        return $this->name.'有'.$this->age.'歲,性別是'.$this->sex;
    }
}

$className = "User";
$user = new $className;
echo $user->show();

file

例3.
不理解這種做法的好處.

<?php

class User{
    public $name = '青風百里';
    public $age = '27';
    public $sex = '男';

    public function show(){
        return $this->name.'有'.$this->age.'歲,性別是'.$this->sex;
    }
}

$user1 = new User();
$user2 = new $user1;
echo $user2->show();

file

例4.
注意$user2這個物件是使用了$user1中的方法來建立的.

<?php

class User{
    public $name = '青風百里';
    public $age = '27';
    public $sex = '男';

    public function show(){
        return $this->name.'有'.$this->age.'歲,性別是'.$this->sex;
    }

    public function getInstance(){
        return new self();
    }
}

$user1 = new User();
$user2 = $user1->getInstance();
echo $user2->show();

file

例5.
new parent()可以用來在子類中呼叫,用於建立父類物件,那麼,建立一個繼承於User的子類SubUser,並在子類中寫一個方法,getInstance,返回new parent().

<?php

class User{
    public $name = '青風百里';
    public $age = '27';
    public $sex = '男';

    public function show(){
        return $this->name.'有'.$this->age.'歲,性別是'.$this->sex;
    }
}

class SubUser extends User{
    public function getInstance() {
        return new parent();
    }
}

$subUser = new SubUser();
$user = $subUser->getInstance();
echo $user->show();

file

例6.

<?php

class User {
    public $name = '青風百里';
    public $age = '27';
    public $sex = '男';

    public function show() {
        return $this->name . '有' . $this->age . '歲,性別是' . $this->sex;
    }

    public function getInstance() {
        return new static();
    }
}

$user1 = new User();
$user2 = $user1->getInstance();
echo $user2->show();

file

下面這幾個方法有待查資料去了解有什麼用.

<?php

echo "<pre>";
$object = new stdClass();
var_dump($object);

$object = new class {
};
var_dump($object);

$object = (Object)NULL;
var_dump($object);
echo "</pre>";

file

對於 stdClass() 的理解

通過查閱資料, stdClass 類是一個沒有成員變數也沒有成員方法的類,它的所有的魔術方法,父類,介面等在初始化時都被設定成NULL,任何時候都可以建立它的物件.
沒有成員變數,我們可以在建立物件之後給它新增,沒有成員方法,就不再可以新增了,那麼用處就是可以用它來代替陣列,儲存資料,寫個小例子驗證一下.

<?php
$obj = new stdClass();

$obj->name = "小明";
$obj->age    = 25;

function showMessage(stdClass $obj) {
    return "姓名是:" . $obj->name . ",年齡是:" . $obj->age;
}

echo showMessage($obj);//輸出 "姓名是:小明,年齡是:25"

new class {}(Object)NULL

目前只知道通過 new class {} 產生的是一個匿名類,通過 (Object)NULL 產生的是一個stdClass類的例項.

本作品採用《CC 協議》,轉載必須註明作者和本文連結

青風百里

相關文章