初学 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();
二.使用类变量
例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();
三.用已存在的对象创建另一个对象
例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();
四.使用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();
五.使用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();
六.使用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();
七.补充
下面这几个方法有待查资料去了解有什么用.
<?php
echo "<pre>";
$object = new stdClass();
var_dump($object);
$object = new class {
};
var_dump($object);
$object = (Object)NULL;
var_dump($object);
echo "</pre>";
对于 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 协议》,转载必须注明作者和本文链接
注意代码格式规范 《PHP PSR 标准规范》
@Littlesqx 好的.谢谢指点
再帮你补充几个不是很常见的,但是可能有用的
@xianyunyehe 感谢指点,虽然我还不知道这个有什么用,先记录下来
@lovecn 不小心写错了,感谢指正