创建对象实例:

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. 百万年薪python之路 -- HTML基础

    一. Web标准 web标准: w3c:万维网联盟组织,用来制定web标准的机构(组织) web标准:制作网页遵循的规范 web标准规范的分类:结构标准.表现标准.行为标准. 结构:html.表示:c ...

  2. day27作业

    FTP需求 客户端可以注册登录 client:输入一个login sever:执行login 客户端登陆后可以选择文件夹上传与下载 client:输入一个upload,download sever:执 ...

  3. 在vue中使用Ueditor

    今天研究的主角是:UEditor UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量.可定制.用户体验优秀等特点. 版本有很多 我用的是:[1.4.3.3 PHP 版本 ...

  4. fenby C语言 P28

    #include <stdio.h> int main(){ int *p1,*p2,a=10,b=20,c; p1=&a; p2=&b; if(a<b) { c=a ...

  5. 通过CSS3实现圆形头像显示

    很久没更新博客了,因为比较菜,也没什么能在上面分享的.作为新手,马上要毕业找工作了,最近又在重新学习web的一些知识,刚刚学到CSS3,跟大家分享一些比较有趣的知识.今天分享的是利用CSS实现圆形头像 ...

  6. 启动elasticsearch报错的几种原因及解决方法

    ERROR: [1] bootstrap checks failed [1]: max virtual memory areas vm.max_map_count [65530] is too low ...

  7. 全方面讲解TensorFlow

    任何曾经试图在 Python 中只利用 NumPy 编写神经网络代码的人都知道那是多么麻烦.编写一个简单的一层前馈网络的代码尚且需要 40 多行代码,当增加层数时,编写代码将会更加困难,执行时间也会更 ...

  8. 【MySQL】MySQL 8.0.X的安装与卸载命令

    1.请读者自行下载MySQL Server https://dev.mysql.com/downloads/mysql/ 2.解压.zip文件 将mysql-8.0.12-winx64.zip解压到 ...

  9. Mui 长按保存图片

    必须先要 引入 mui.js,然后参考具体代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8 ...

  10. QHDYZ模拟赛20191027 提前透题

    你们想的美 我给你们透一下题目名称 别刷博客了快去做题