创建对象实例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

<?php

/**

 * PHP创建对象的六种方式

 */

class Person{

  private $name = 'bruce';

  public function getName(){

    return $this->name;

  }

  public static function getObjBySelf(){

    return new self();

  }

  //动态延迟绑定,能识别调用者

  public static function getObjcByStatic(){

    return new static();

  }

}

//Person子类 Teacher

class Teacher extends Person{

  public static function getObjByParent(){

    return new parent();

  }

}

//1、new 类名();创建对象

$obj1 = new Person();//等价于写法 $obj1 = new Person;

echo '类名:'.get_class($obj1).'<br>';

echo $obj1->getName().'<hr>';

//2、将类名字符串赋值给一个变量,通过变量创建

$clsName = 'Person';

$obj2 = new $clsName();

echo '类名:'.get_class($obj2).'<br>';

echo $obj2->getName().'<hr>';

//3、通过对象实例创建对象

$obj3 = new $obj2();

echo '类名:'.get_class($obj3).'<br>';

echo $obj3->getName().'<hr>';

//4、通过 new self()

//$obj4 = (new $obj3())->getObjBySelf();

$obj4 = Person::getObjBySelf();

echo '类名:'.get_class($obj4).'<br>';

echo $obj4->getName().'<hr>';

//5、通过 new parent()

$obj5= Teacher::getObjByParent();

echo '类名:'.get_class($obj5).'<br>';

echo $obj5->getName().'<hr>';

//6、通过 new static();

$obj6 = Person::getObjcByStatic();

echo '类名:'.get_class($obj6).'<br>';//类名:Person

echo $obj6->getName().'<hr>'; //bruce

//当用子类去调用时候,发现static自动识别当前调用者(静态延迟绑定),返回当前调用者对象

$obj7 = Teacher::getObjcByStatic();

echo '类名:'.get_class($obj7).'<br>';//类名:Teacher

echo $obj7->getName().'<hr>';//bruce

$obj8 = Person::getObjBySelf();

echo '类名:'.get_class($obj8).'<br>';//类名:Person

echo $obj8->getName().'<hr>';

//new self()在子类中调用依旧返回原来父类的绑定

$obj9 = Teacher::getObjBySelf();

echo '类名:'.get_class($obj9).'<br>';//类名:Person

echo $obj9->getName().'<hr>';

运行结果:

明确的学习思路能够更高效的学习

 

点击加入该群学习

PHP创建对象的6种方式的更多相关文章

  1. Java中创建对象的几种方式

    Java中创建对象的五种方式: 作为java开发者,我们每天创建很多对象,但是我们通常使用依赖注入的方式管理系统,比如:Spring去创建对象,然而这里有很多创建对象的方法:使用New关键字.使用Cl ...

  2. C++创建对象的两种方式

    C++创建对象有两种方式,在栈上创建对象(Objects on the Stack)和在堆上创建对象(Objects on the Heap). 假设我们有以下的类: #include <str ...

  3. spring入门:beans.xml不提示、别名、创建对象的三种方式

    spring的版本是2.5 一.beans.xml文件不提示 Location:spring-framework-2.5.6.SEC01\dist\resources\spring-beans-2.5 ...

  4. OOP 创建对象的7种方式

    JavaScript OOP 创建对象的7种方式   我写JS代码,可以说一直都是面向过程的写法,除了一些用来封装数据的对象或者jQuery插件,可以说对原生对象了解的是少之又少.所以我拿着<J ...

  5. Java创建对象的4种方式?

     [Java创建对象的4种方式?] 1)通过new语句实例化一个对象 2)通过反射机制创建对象 3)通过clone()方法创建一个对象  (复制) 4)通过反序列化方式创建对象

  6. Java创建对象的几种方式

    解析:Java创建对象的几种方式(重要):(1) 用new语句创建对象,这是最常见的创建对象的方法.(2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Co ...

  7. &和&&的共同点和区别、Java字符含义和Java创建对象的几种方式

    一.&和&&的共同点和区别 1.&和&&的联系(共同点): &和&&都可以用作逻辑与运算符,但是要看使用时的具体条件来决定. 操 ...

  8. JS 面向对象 ~ 创建对象的 9 种方式

    一.创建对象的几种方式 1.通过字面量创建 var obj = {}; 这种写法相当于: var obj = new Object(); 缺点:使用同一个接口创建很多单个对象,会产生大量重复代码 2. ...

  9. Java中创建对象的五种方式

    我们总是讨论没有对象就去new一个对象,创建对象的方式在我这里变成了根深蒂固的new方式创建,但是其实创建对象的方式还是有很多种的,不单单有new方式创建对象,还有使用反射机制创建对象,使用clone ...

  10. Java创建对象的几种方式。

    Java创建对象的几种方式(重要): (1) 用new语句创建对象,这是最常见的创建对象的方法. (2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Con ...

随机推荐

  1. 个人考场VIM配置

    前言 这个是我个人使用的Vim配置.双引号杠掉的部分是关于光标行列高亮(觉得难受而杠)和输入左括号同时打上右括号的(不习惯),如果要启用的话去掉引号即可. 将以下要启用的输入到$“./vimrc”$中 ...

  2. 在元素上写事件和addEventListent()的区别

    在元素上写事件和addEventListent()的区别1. onclick添加事件不能绑定多个事件,后面绑定的会覆盖前面的.而addEventListener能添加多个事件绑定,按顺序执行.2. a ...

  3. JAVA eclipse 问题汇总(持续更新)

    解决eclipse中文字很小 新下载的eclipse4.2.1版本,显示中文字体很小,但是英文比较正常.网上查看要更改字体大小,但是更改后英文也变大了,不是想要的结果.window – prefere ...

  4. SpringBoot接管SpringMvc

    SpringBoot接管SpringMvc Spring Web MVC framework(通常简称为“Spring MVC”)是一个丰富的“model 视图控制器”web framework. S ...

  5. Linux常见命令之文件处理命令

    ls命令 ls(选项)(参数) 选项 -a:显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为影藏,不会列出): -A:显示除影藏文件“.”和“..”以外的所有文件列表: -C:多列显示输出 ...

  6. C++学习笔记2_函数.函数指针.函数模板

    1. 内联函数void printAB(int a,int b){ cout<<(a)<<(b)<<endl;}int main(void){ for(int i= ...

  7. 闯缸鱼:看懂python如何实现整数加和,再决定是否自学编程

    玩鱼缸的新手都知道有一种鱼叫"闯缸鱼",皮实好养,帮助新手判断鱼缸环境是否准备好.这篇笔记,最初用来解答一个编程新手的疑问,后来我发现,整理一下也可当做有兴趣自学python 编程 ...

  8. 五角场之殇。曾与张江、漕河泾、紫竹齐名。如今,上海四大IT科技园是否还在?

    五角场.张江.漕河泾.紫竹并称为上海四大 IT 科技园.张江与漕河泾有着最多的国内互联网公司,以及部分的外企.随着国内互联网公司的崛起,张江与漕河泾名声远扬,不仅在上海IT圈人尽皆知,在全国范围也是小 ...

  9. js基础总结01 --操作DOM

    1.选择对象 通过id来选择绑定一个dom节点 :document.getElementById('p1'): 通过类名来绑定一个类数组的对象集合,:document.getElementsByCla ...

  10. linux shell脚本语法笔记

    1.&,&&,|,|| &:除了最后一个cmd,前面的cmd均已后台方式静默执行,执行结果显示在终端上,个别的cmd错误不影响整个命令的执行,全部的cmd同时执行 &a ...