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>';

運行結果:

相關文章
相關標籤/搜索