初学 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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 6

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

5年前 评论
xianyunyehe

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

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

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

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

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

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

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

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!