PHP的魔术方法怎么用


本篇内容介绍了“PHP的魔术方法怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在PHP中,以双下划线(__)开始命名的方法被称作PHP中的魔术方法,它们在PHP中充当很重要的角色。魔术方法包括:本文将使用一些实例展示 PHP 魔术方法的运用。当创建对象时,PHP 类的构造方法是第一个被调用的方法。每个类都有构造方法。若你没在类中明确声明定义它,将会有一个默认的无参类构造方法存在,虽然它不会在类中定义出现。1) 构造方法的运用类的构造方法通常用于执行一些初始化任务,诸如当创建对象时,为成员初始化赋值。2) 类中构造方法的声明格式注意: 在多数类中仅可以声明一个构造方法。因为, PHP 不支持构造方法重载。下面是个完整的例子:无参创建 $Person1 对象。使用一个参数 “Jams” 调用创建 $Person2 对象。使用3个参数调用创建 $Person3 对象。析构函数与构造函数相反。析构函数允许你在销毁对象之前执行一些操作,例如关闭文件,清空结果集等等。析构函数是 PHP 5 引入的新功能。析构函数的声明与构造函数类似,以两个下划线开头,名称固定为 __destruct()。析构函数不能带参数。析构函数在类中一般不常见。它是类的可选部分,通常用于在类销毁之前完成一些清理任务。这是使用析构函数的示例:输出结果该方法接受两个参数。第一个参数为未定义的方法名称,第二个参数则为传入方法的参数构成的数组在程序中调用未定义方法时, __call() 方法将被调用。示例显示结果当在程序中调用未定义的静态方法,__callStatic() 方法将会被自动调用。__callStatic() 的用法类似于 __call() 。下面举个例子:执行结果如下:当你尝试在外部访问对象的私有属性时,应用程序将抛出异常并结束运行。我们可以使用 __get 方法解决该问题。该方法可以获取从对象外部获取私有属性的值。举例如下结果显示如下set($property,$value)方法用于设置类的私有属性。分配了未定义的属性后,将触发set()方法,并且传递的参数是设置的属性名称和值。下面是演示代码:代码运行结果:在使用__isset()方法之前,让我先解释一下isset()方法的用法。isset()方法主要用于确定是否设置了此变量。如果在对象外部使用isset()方法,则有两种情况:如果该参数是公共属性,则可以使用isset()方法确定是否设置了该属性。如果参数是私有属性,则isset()方法将不起作用。那么对于私有属性,有什么办法知道它是否被设置了吗?当然,只要在类中定义__isset()方法,就可以在类外部使用isset()方法来确定是否设置了私有属性。当在未定义或不可访问的属性上调用isset()或empty()时,将调用__isset()方法。下面是一个例子:代码运行结果如下:与isset()方法类似,当在未定义或不可访问的属性上调用unset()方法时,将调用unset()方法。下面是一个例子:代码的运行结果免费云主机域名如下:serialize()方法将检查类中是否有魔术方法__sleep()。如果存在,将首先调用该方法,然后执行序列化操作。__sleep()方法通常用于指定保存数据之前需要序列化的属性。如果有一些非常大的对象不需要全部保存,那么您会发现此功能非常有用。有关详细信息,请参考以下代码:代码运行结果如下:与sleep()方法相比,wakeup()方法通常用于反序列化操作,例如重建数据库连接或执行其他初始化操作。下面是相关实例:代码运行结果如下:使用echo方法直接打印对象时,将调用__toString()方法。注意:此方法必须返回一个字符串,否则将在E_RECOVERABLE_ERROR级别上引发致命错误。而且您也不能在__toString()方法中抛出异常。下面是相关的实例:运行代码结果如下:那么,如果在类中未定义__toString()方法怎么办?让我们尝试一下。运行代码结果如下:显然,它在页面上报告了一个致命错误,PHP语法不支持这样的写法。当您尝试以调用函数的方式调用对象时,__ invoke()方法将被自动调用。注意:此功能仅在PHP 5.3.0及更高版本中有效。下面是相关实例:运行代码结果如下:如果坚持使用对象作为方法(但未定义__invoke()方法),则将得到以下结果:从PHP 5.1.0开始,在调用var_export()导出类代码时会自动调用__set_state()方法。__set_state()方法的参数是一个包含所有属性值的数组,其格式为array(‘property’=> value,…)在以下示例中,我们没有定义__set_state()方法:执行代码结果如下:显然,对象的属性已打印。现在让我们看看定义__set_state()方法的另一种情况:执行代码结果如下:在PHP中,我们可以使用clone关键字通过以下语法克隆对象:但是,使用clone关键字只是一个浅拷贝,因为所有引用的属性仍将指向原始变量。如果在对象中定义了clone()方法,则将在复制生成的对象中调用clone()方法,该方法可用于修改属性的值(如有必要)。下面是相关的示例:运行代码结果如下:__autoload()方法可以尝试加载未定义的类。过去,如果要在程序文件中创建100个对象,则必须使用include()或require()来包含100个类文件,或者必须在同一类文件中定义100个类。 例如以下:那么,如果我们使用__autoload()方法呢?当PHP引擎第一次使用类A时,如果未找到类A,则autoload方法将被自动调用,并且类名称“ A”将作为参数传递。因此,我们在autoload()方法中需要做的是根据类名找到相应的类文件,然后将其包含在内。如果找不到该文件,则php引擎将抛出异常。当执行 var_dump() 方法时,__debugInfo() 方法会被自动调用。如果 __debugInfo() 方法未被定义,那么 var_dump 方法或打印出这个对象的所有属性。举例说明:执行结果:注意:__debugInfo() 方法应该在 PHP 5.6.0 及以上版本中使用。“PHP的魔术方法怎么用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: Springboot中怎么集成Swagger2框架

本篇内容主要讲解“Springboot中怎么集成Swagger2框架”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Springboot中怎么集成Swagger2框架”吧!摘要:在项目开发中,往往期望做到前后端分离,…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 05/04 16:32
Next 05/04 16:34

相关推荐