摘要:现在很多框架中调用方法都是这种格式的但是他们真的是静态方法吗这种情况在中尤其常见但是开发过程中很明显这些有一部分不是静态的比如你使用一个模型那么你每次实例化出来他都是一个全新的互不影响这里就用到了一个魔术方法举个栗子当然魔术方法也是很耗性
现在很多框架中调用方法都是Foo::bar()这种格式的,但是他们真的是静态方法吗?
这种情况在 larave 中尤其常见,但是开发过程中很明显这些有一部分不是静态的,比如你使用一个模型User,那么你每次实例化出来他都是一个全新的,互不影响,这里就用到了一个魔术方法__callStatic
举个栗子:
hello(); $test::hi(); //this is __call:hello //this is __callStatic:hi
当然魔术方法也是很耗性能的一种方式,每次调用的时候后回先扫一遍class没找到方法时才会调用它,而为了代码的整洁和抽象这个方法也能给很大的帮助,在这之间去要有个权衡
下面实现的 log 类,采用的就是这种方法,将方法解耦出来,只要符合规定的接口就能调用
alert("hello");
输出:
this is Log method info array(4) { [0]=> string(6) "好好" [1]=> string(6) "学习" [2]=> string(6) "天天" [3]=> string(6) "向上" } this is Log method alert: hello
也许有的小伙伴已经看出来了,没错!这段代码就是仿照(抄)的 EasyWechat的日志部分,代码片段
博客原文
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/23103.html
摘要:魔术方法知识点整理代码使用语法编写一构造函数和析构函数构造函数具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。在析构函数中调用将会中止其余关闭操作的运行。析构函数中抛异常会导致致命错误。 PHP魔术方法知识点整理 代码使用PHP7.2语法编写 一、构造函数和析构函数 __construct() 构造函数 __construct ([ mi...
摘要:一面向对象的概念什么是面向对象世间万物皆对象,抽象的也是对象,一切可见或不可见都是对象对象的基本组成对象包含两个部分对象的组成元素是对象的数据模型,用于描述对象的数据又称为对象的属性,或者对象的成员变量对象的行为是对象的行为模型,用于描述对 一、面向对象的概念 1.1 什么是面向对象(object oriented) 世间万物皆对象,抽象的也是对象,一切可见或不可见都是对象 ...
摘要:重载在中就大量应用了重载相关知识,如在中就用到了方法重载知识使用魔术方法来动态创建类中未定义或不可见的静态方法。中通过引入魔术方法来实现动态的创建类属性和方法,包括属性重载的魔术方法和方法重载的魔术方法。 说明:本文主要讲述PHP中重载概念,由于Laravel框架中经常使用这块知识点,并且PHP的重载概念又与其他OOP语言如JAVA中重载概念不一样,故复习并记录相关知识点。同时,作者会...
摘要:将所有以两个下划线开头的类方法保留为魔术方法。和当对象被当做使用时,这个方法会被自动调用。此方法必须返回一个字符串当对象被当成方法调用时,这个方法会被自动调用。参数是一个枚举数组,包含着要传递给方法的参数。函数把数组元素组合为一个字符串。 PHP 将所有以 _ _(两个下划线)开头的类方法保留为魔术方法。 __toString() 和__invoke() public stri...
摘要:魔术方法构造函数允行开发者在一个类中定义一个方法作为构造函数。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承假如没有被定义为的话。和函数会检查类中是否存在一个魔术方法。魔术常量魔法方法 PHP - 魔术常量 __LINE__ 文件中的当前行号 __FILE__ 文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名。 __DIR__ 文件所在的目录。如果用在...
阅读 3933·2021-09-22 10:02
阅读 3365·2019-08-30 15:52
阅读 3060·2019-08-30 12:51
阅读 753·2019-08-30 11:08
阅读 2064·2019-08-29 15:18
阅读 3105·2019-08-29 12:13
阅读 3591·2019-08-29 11:29
阅读 1872·2019-08-29 11:13