初学 PHP 总结创建对象

一。使用 new 关键字#

例 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

四。使用 new self()#

例 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

五。使用 new parent()#

例 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

六。使用 new static()#

例 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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 6

注意代码格式规范 《PHP PSR 标准规范》

6年前 评论
xianyunyehe

再帮你补充几个不是很常见的,但是可能有用的

<?php
$object = new stdClass();
var_dump($object);

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

$object = (Object)null;
var_dump($object);
6年前 评论

@xianyunyehe 感谢指点,虽然我还不知道这个有什么用,先记录下来

6年前 评论
$className = "User";
$user = new User;//new $className 
echo $user->show();
6年前 评论

@lovecn 不小心写错了,感谢指正

6年前 评论