初学 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类的实例.

青风百里

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6
Littlesqx

注意代码格式规范 https://learnku.com/docs/psr

6个月前
青风百里

@Littlesqx 好的.谢谢指点

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个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!