php魔术方法有哪些及怎么使用(php,编程语言)

时间:2024-05-05 05:46:22 作者 : 石家庄SEO 分类 : 编程语言
  • TAG :

    php%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95%E6%9C%89%E5%93%AA%E4%BA%9B%E5%8F%8A%E6%80%8E%E4%B9%88%E4%BD%BF%E7%94%A8

显示结果

当在程序中调用未定义的静态方法,callStatic() 方法将会被自动调用。

callStatic() 的用法类似于 __call() 。下面举个例子:

执行结果如下:

当你尝试在外部访问对象的私有属性时,应用程序将抛出异常并结束运行。我们可以使用 __get 方法解决该问题。该方法可以获取从对象外部获取私有属性的值。举例如下

结果显示如下

set($property,$value)方法用于设置类的私有属性。分配了未定义的属性后,将触发set()方法,并且传递的参数是设置的属性名称和值。

下面是演示代码:

代码运行结果:

MynameisLili,I'm16yearsold

在使用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()方法中抛出异常。

下面是相关的实例:

运行代码结果如下:

gogogo

那么,如果在类中未定义__toString()方法怎么办?让我们尝试一下。

}

运行代码结果如下:

Catchablefatalerror:ObjectofclassPersoncouldnotbeconvertedtostringinD:\phpStudy\WWW\test\index.phponline18

显然,它在页面上报告了一个致命错误,PHP语法不支持这样的写法。

当您尝试以调用函数的方式调用对象时, invoke()方法将被自动调用。

注意:此功能仅在PHP 5.3.0及更高版本中有效。

下面是相关实例:

}

运行代码结果如下:

Thisisanobject

如果坚持使用对象作为方法(但未定义invoke()方法),则将得到以下结果:

Fatalerror:FunctionnamemustbeastringinD:\phpStudy\WWW\test\index.phponline18

从PHP 5.1.0开始,在调用var_export()导出类代码时会自动调用set_state()方法。

__set_state()方法的参数是一个包含所有属性值的数组,其格式为array('property'=> value,...)

在以下示例中,我们没有定义set_state()方法:

}

执行代码结果如下:

Person::__set_state(array('sex'=>'Male','name'=>'John','age'=>25,))

显然,对象的属性已打印。

现在让我们看看定义__set_state()方法的另一种情况:

}

执行代码结果如下:

Person::__set_state(array('sex'=>'Male','name'=>'Jams','age'=>25,))

在PHP中,我们可以使用clone关键字通过以下语法克隆对象:

$copy_of_object=clone$object;

但是,使用clone关键字只是一个浅拷贝,因为所有引用的属性仍将指向原始变量。

如果在对象中定义了clone()方法,则将在复制生成的对象中调用clone()方法,该方法可用于修改属性的值(如有必要)。

下面是相关的示例:

}

运行代码结果如下:

__autoload()方法可以尝试加载未定义的类。

过去,如果要在程序文件中创建100个对象,则必须使用include()或require()来包含100个类文件,或者必须在同一类文件中定义100个类。 例如以下:

那么,如果我们使用__autoload()方法呢?

当PHP引擎第一次使用类A时,如果未找到类A,则autoload方法将被自动调用,并且类名称“ A”将作为参数传递。因此,我们在autoload()方法中需要做的是根据类名找到相应的类文件,然后将其包含在内。如果找不到该文件,则php引擎将抛出异常。

当执行 var_dump() 方法时,debugInfo() 方法会被自动调用。如果 debugInfo() 方法未被定义,那么 var_dump 方法或打印出这个对象的所有属性。

举例说明:

var_dump(newC(42));

执行结果:

object(C)#1(1){["propSquared"]=>int(1764)}

注意:__debugInfo() 方法应该在 PHP 5.6.0 及以上版本中使用。

本文:php魔术方法有哪些及怎么使用的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:java接口的修饰符怎么定义下一篇:

11 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18