php魔术方法应用实例代码汇总

伊谢尔伦
发布: 2017-06-29 13:34:39
原创
1546人浏览过

这篇文章主要介绍了php类中的魔术方法(magic method)简明总结,这些方法包括construct()、destruct()、call()、callstatic()、get()、set()、tostring()等,需要的朋友可以参考下

1. construct()和destruct()

在实例被 创建/销毁 的时候被调用,都可以传递0个或多个参数。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

class A

 {

  function A()

  {

   echo "build A";

  }

 

  function destruct()

  {

   echo "destroy A";

  }

 }

 

 $obj = new A();

 //unset($obj);

登录后复制

Note:The destructor method will be called as soon as there are no other references to a particular object, or in any order during the shutdown sequence.

  关于构造函数,PHP5.3.3开始,一个定义在某个特定的命名空间里的class中以类名命名的方法将不再被认为是构造函数。在无命名空间的类中与原来一样依旧是构造函数。如:

立即学习PHP免费学习笔记(深入)”;

1

2

3

4

5

6

7

namespace Foo;

class Bar {

  public function Bar() {

    // treated as constructor in PHP 5.3.0-5.3.2

    // treated as regular method as of PHP 5.3.3

  }

}

登录后复制

如果没有namespace Foo; 那么Bar()还将被当作构造函数。另外,如果存在下面的情况:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

function construct()

  {

   echo "construct A";

  }

 

  function A()

  {

   echo "build A";

  }

 

  function destruct()

  {

   echo "destroy A";

  }

 }

登录后复制

即既包含construct()又包含与类名同名的函数,那么将只调用construct()。

2. call()和callStatic()

当尝试调用一个不存在的方法时调用该方法。两个参数,一个是方法名,一个是被调用方法的参数数组

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

class MethodTest

{

  public function call($name, $arguments)

  {

    // Note: value of $name is case sensitive.

    echo "Calling object method '$name' "

       . implode(' ', $arguments). "<br>";

  }

 

  public static function callStatic($name, $arguments)

  {

    // Note: value of $name is case sensitive.

    echo "Calling static method '$name' "

       . implode(' ', $arguments). "<br>";

  }

}

 

$obj = new MethodTest;

$obj->runTest('in','object','context');

MethodTest::runTest('in','static','context');

登录后复制

其中,$arguments作为一个array传入。运行结果:

Calling object method 'runTest' in object context
Calling static method 'runTest' in static context

AppMall应用商店
AppMall应用商店

AI应用商店,提供即时交付、按需付费的人工智能应用服务

AppMall应用商店56
查看详情 AppMall应用商店

还要注意函数的作用域protected和private:

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

class TestMagicCallMethod {

  public function foo()

  {

    echo METHOD.PHP_EOL."<br>";

  }

 

  public function call($method, $args)

  {

    echo METHOD.PHP_EOL."<br>";

    if(method_exists($this, $method))

    {

      $this->$method();

    }

  }

   

  protected function bar()

  {

    echo METHOD.PHP_EOL."<br>";

  }

 

  private function baz()

  {

    echo METHOD.PHP_EOL."<br>";

  }

}

 

$test  new TestMagicCallMethod();

$test->foo();

/**

 * Outputs:

 * TestMagicCallMethod::foo

 */

 

$test->bar();

/**

 * Outputs:

 * TestMagicCallMethod::call

 * TestMagicCallMethod::bar

 */

 

$test->baz();

/**

 * Outputs:

 * TestMagicCallMethod::call

 * TestMagicCallMethod::baz

 */

登录后复制

3.get()和set()

  当试图读取一个对象并不存在的属性的时候被调用。

  Note:我们可以用这个函数实现类似java中反射的各种操作。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

class Test

{

  public function get($key)

  {

   echo $key . " not exists";

  }

  public function set($key,$value)

  {

   echo $key . " = ".$value;

  }

}

 

$t = new Test();

echo $t->name."<br>";

$t->name = "abc";

登录后复制

输出:
name not exists
name = abc

4. toString()

 这个方法类似于java的toString()方法,当我们直接打印对象的时候回调用这个函数,函数必须返回一个string。

1

2

3

4

5

6

7

8

9

10

11

12

13

class Test

{

  private $name = "abc";

  private $age = 12;

 

  public function toString()

  {

    return "name : $this->name, age : $this->age";

  }

}

 

$t = new Test();

echo $t;

登录后复制

输出:

name : abc, age : 12

以上就是php魔术方法应用实例代码汇总的详细内容,更多请关注php中文网其它相关文章!

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号