PHP面向对象--重载
2011-04-19 16:09
288 查看
方法调用和成员访问都能通过__call,__get和__set方法被加载。这些方法将只有当你试图访问不包括成员或方法的对象或继承对象时触发。不是所有的重载方法都必须被定义为static.
从PHP
5.1.0开始也可以通过__isset()和__unset()方法逐个重载isset()和unset()函数。
成员函数重载(Member overloading)
void __set ( string name, mixed value )
mixed __get ( string name )
bool __isset ( string name )
void __unset ( string name )
类成员可以通过定义这些指定的特定方法加载类中的自定义代码。$name参数被用来命名变量,这些变量必须是被设置的或返回的。__set()方法的$value参数指定设置$name的对象的值。MBT shoes clearance
例子 19-18.使用__get,__set,__isset和__unset重载的例子
PHP代码如下:
<?php
class Setter
{ public $n;
private $x = array("a" => 1, "b" => 2, "c" => 3);
private function __get($nm)
{ echo "Getting [$nm]\n";
if (isset($this->x[$nm]))
{ $r = $this->x[$nm];
print "Returning: $r\n";
return $r;
} else { echo "Nothing!\n"; }
}front lace
wig
private function __set($nm, $val)
{ echo "Setting [$nm] to $val\n";
if (isset($this->x[$nm]))
{ $this->x[$nm] = $val;
echo "OK!\n";
} else { echo "Not OK!\n"; }
}
private function __isset($nm)
{ echo "Checking if $nm is set\n";
return isset($this->x[$nm]);
}
private function __unset($nm)
{ echo "Unsetting $nm\n";
unset($this->x[$nm]);
}
}
$foo = new Setter();
$foo->n = 1;
$foo->a = 100;
$foo->a++;
$foo->z++;
var_dump(isset($foo->a)); //true
unset($foo->a);
var_dump(isset($foo->a)); //false
// this doesn't pass through the __isset() method
because 'n' is a public property
var_dump(isset($foo->n));
var_dump($foo);
?> party
wigs
上例将输出:
CODE:
Setting [a] to 100
OK!
Getting [a]
Returning: 100
Setting [a] to 101
OK!
Getting [z]
Nothing!
Setting [z] to 1
Not OK!
Checking if a is set
bool(true)
Unsetting a
Checking if a is set
bool(false)
bool(true)
object(Setter)#1 (2) {
["n"]=>int(1)["x:private"]=>array(2) {
["b"]=>
int(2)
["c"]=>
int(3)
}
}Wig factories
方法重载(Method overloading)
mixed __call ( string name, array arguments )
类方法可以通过定义这些指定的特定方法加载类中的自定义代码。$name参数被用来命名那些被请求的函数名。Arguments在定义为array的函数的$arguments参数中将被传递。从__call()方法返回的值将被返回方法的访问者。
例子 19-19.使用__call重载的实例
PHP代码如下:
<?php
class Caller
{ private $x = array(1, 2, 3);
public function __call($m, $a)
{ print "Method $m called:\n";
var_dump($a);
return $this->x;
}
}
$foo = new Caller();
$a = $foo->test(1, "2", 3.4, true);
var_dump($a);
?>
上例将输出:
CODE:
Method test called:
array(4) {
[0]=>
int(1)
[1]=>
string(1) "2"
[2]=>
float(3.4)
[3]=>
bool(true)
}
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
从PHP
5.1.0开始也可以通过__isset()和__unset()方法逐个重载isset()和unset()函数。
成员函数重载(Member overloading)
void __set ( string name, mixed value )
mixed __get ( string name )
bool __isset ( string name )
void __unset ( string name )
类成员可以通过定义这些指定的特定方法加载类中的自定义代码。$name参数被用来命名变量,这些变量必须是被设置的或返回的。__set()方法的$value参数指定设置$name的对象的值。MBT shoes clearance
例子 19-18.使用__get,__set,__isset和__unset重载的例子
PHP代码如下:
<?php
class Setter
{ public $n;
private $x = array("a" => 1, "b" => 2, "c" => 3);
private function __get($nm)
{ echo "Getting [$nm]\n";
if (isset($this->x[$nm]))
{ $r = $this->x[$nm];
print "Returning: $r\n";
return $r;
} else { echo "Nothing!\n"; }
}front lace
wig
private function __set($nm, $val)
{ echo "Setting [$nm] to $val\n";
if (isset($this->x[$nm]))
{ $this->x[$nm] = $val;
echo "OK!\n";
} else { echo "Not OK!\n"; }
}
private function __isset($nm)
{ echo "Checking if $nm is set\n";
return isset($this->x[$nm]);
}
private function __unset($nm)
{ echo "Unsetting $nm\n";
unset($this->x[$nm]);
}
}
$foo = new Setter();
$foo->n = 1;
$foo->a = 100;
$foo->a++;
$foo->z++;
var_dump(isset($foo->a)); //true
unset($foo->a);
var_dump(isset($foo->a)); //false
// this doesn't pass through the __isset() method
because 'n' is a public property
var_dump(isset($foo->n));
var_dump($foo);
?> party
wigs
上例将输出:
CODE:
Setting [a] to 100
OK!
Getting [a]
Returning: 100
Setting [a] to 101
OK!
Getting [z]
Nothing!
Setting [z] to 1
Not OK!
Checking if a is set
bool(true)
Unsetting a
Checking if a is set
bool(false)
bool(true)
object(Setter)#1 (2) {
["n"]=>int(1)["x:private"]=>array(2) {
["b"]=>
int(2)
["c"]=>
int(3)
}
}Wig factories
方法重载(Method overloading)
mixed __call ( string name, array arguments )
类方法可以通过定义这些指定的特定方法加载类中的自定义代码。$name参数被用来命名那些被请求的函数名。Arguments在定义为array的函数的$arguments参数中将被传递。从__call()方法返回的值将被返回方法的访问者。
例子 19-19.使用__call重载的实例
PHP代码如下:
<?php
class Caller
{ private $x = array(1, 2, 3);
public function __call($m, $a)
{ print "Method $m called:\n";
var_dump($a);
return $this->x;
}
}
$foo = new Caller();
$a = $foo->test(1, "2", 3.4, true);
var_dump($a);
?>
上例将输出:
CODE:
Method test called:
array(4) {
[0]=>
int(1)
[1]=>
string(1) "2"
[2]=>
float(3.4)
[3]=>
bool(true)
}
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
相关文章推荐
- PHP 面向对象的方法重载
- php 面向对象abstract,interface,重载,子类继承父类
- PHP 面向对象的方法重载
- 【PHP面向对象(OOP)编程入门教程】12.重载新的方法(parent::)
- php面向对象之重写与重载
- PHP面向对象1-重载overloading
- PHP 面向对象:方法重载
- php __call()的用法之面向对象重载
- PHP面向对象之重载
- PHP那些事:面向对象的方法重载
- PHP面向对象之重写与重载-129
- PHP面向对象之重写与重载
- php 面向对象的三大要素(封装、继承、多态)以及重写(override)和重载(overload)的举例说明
- PHP面向对象_重载(overloading)
- PHP面向对象之重写与重载
- php面向对象(三),抽象类,抽象方法,接口及php的”重载“
- php面向对象之重载(overloading)
- PHP面向对象_模拟一般面向对象语言中的方法重载(overload)
- php面向对象的方法重载两种版本比较