我在使用php面向对象。
设计了一个类。其中我也实现了 __get和__set方法。
可是我发现一个问题,使用此两个方法获取和设置属性值时,如果类中不存在属性,是不给任务错误和警告的。
请问在PHP中哪个函数或操作符可以检测此类中有或没有该属性。我是想如果设置或获取属性值时,没有的话,我要警告无此属性。
设计了一个类。其中我也实现了 __get和__set方法。
可是我发现一个问题,使用此两个方法获取和设置属性值时,如果类中不存在属性,是不给任务错误和警告的。
请问在PHP中哪个函数或操作符可以检测此类中有或没有该属性。我是想如果设置或获取属性值时,没有的话,我要警告无此属性。
class T
{
var $strA = '';
}
$t = new T;
if(isset($t->strA))
{
echo 'strA';//打印了
}
if(isset($t->strB))
{
echo 'strB';//不打印
}
As opposed with isset(), property_exists() returns TRUE even if the property has the value NULL.
的确,学习了property_exists
(PHP 5 >= 5.1.0RC1)
试了下,对于
class T
{
var $strA = '';
}
$t = new T;
$t->strB = '';//这种情况无效,但isset可以
那么 __set 就没有必要存在了
class myClass {
private $a; function test($val) {
if(property_exists('myClass', $val)){
return true;
}else{
return false;
}
} function test2(){
if($this->test("a")){
//你的处理
}else{
//你的处理
}
}
}
function __get($var_name){
//当实例化对象后,调用了不存在的对象属性时执行(取值)
//echo $Object->not_var
if(isset($this->private_var[$var_name])) {
return($this->private_var[$var_name]);
}else{
return(NULL);
}
}
function __set($var_name){
//当实例化对象后,调用了不存在的对象属性时执行(赋值)
//$Object->not_var1 = "1";
if(isset($this->private_var[$var_name])) {
return($this->private_var[$var_name]);
}else{
return(NULL);
}
}
本来就是调用了类不存在的属性的时候执行的。你给类加了__get和__set方法后,调用不存在的属性时,当然不会报错了。
你可以直接在__get和__set方法里提示。你还可以直接把__get和__set方法删除了,那PHP就会自动报错了
<?php
class className{
function __construct(){
}
function __destruct(){
}
function __get($var_name){
echo "类:".__CLASS__."的属性:{$var_name}不存在!你不能得到值";
exit;
}
function __set($var_name){
echo "类:".__CLASS__."的属性:{$var_name}不存在!你不能给其赋值";
exit;
}
function __call($function_name, $args){
print("类:".__CLASS__."的方法: $function_name()不存在!<br>\n");
print("调用参数: ");
print_r($args);
exit;
}
}
?>