PHP建立对象的6种方式

 

建立对象实例:php

1this

2spa

3code

4对象

5blog

6ci

7字符串

8get

9string

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();

  }

}

 

//一、new 类名();建立对象

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

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

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

 

//二、将类名字符串赋值给一个变量,经过变量建立

$clsName = 'Person';

$obj2 = new $clsName();

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

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

 

//三、经过对象实例建立对象

$obj3 = new $obj2();

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

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

 

//四、经过 new self()

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

$obj4 = Person::getObjBySelf();

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

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

 

//五、经过 new parent()

$obj5= Teacher::getObjByParent();

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

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

 

//六、经过 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>';

运行结果:

相关文章
相关标签/搜索