在本教程中,我们将介绍一些重要的PHP魔术方法,您可以使用它们来处理不存在的成员和方法。
PHP提供了一对魔术方法来处理不存在的或私有属性的访问:
__get()
__set()
让我们看下面的例子:
<?php
class
Person{
private
$firstName
;
public
function
__get(
$propertyName
){
echo
"试图访问不存在的属性: $propertyName "
}
__set(
$propertyNane
,
$propertyValue
"试图修改不存在的属性: $propertyNane "
$p
=
new
Person();
->firstName =
'alice'
->firstName;
->lastName =
'itroad'
->lastName;
使用__get()和__set()可以把类的单独属性放到一个关联数组中,请看下面的示例:
$properties
if
(
array_key_exists
)){
return
$this
->properties[
];
] =
var_dump(
);
与_get()和_set()方法类似,当调用类中不存在的方法时,会自动调用_call()魔术方法。
下面的示例演示了一个简单的string类,它支持三种方法:strlen()、strtoupper()和strtolower()。
CString{
$str
''
$APIs
array
'strlen'
'strtoupper'
'strtolower'
__construct(
->str =
__call(
$method
$args
(in_array(
->APIs)){
array_unshift
->str);
call_user_func_array(
else
{
die
'错误:调用不支持的方法: '
.
CString(
'这是一字符串对象'
->
strlen
() .
strtoupper
strtolower
->len();
// 错误:调用不支持的方法: len
PHP使用双下划线(__)作为类中魔术方法的前缀,因此建议您定义方法名时不要以双下划线(__)开头。
注意,构造函数和析构函数方法(__construct() 和 __destruct() )也是魔术方法。
原文链接:https://codingdict.com/