2 回答
TA贡献1752条经验 获得超4个赞
您应该使用 __isset() 方法。这是一个例子:
<?php
class Foo {
private $myproperty;
public function __construct() {
if (
( !isset( $_SESSION ) ) &&
( session_status() == PHP_SESSION_NONE )
) {
session_start();
}
}
public function __set( $name, $value ) {
if ( property_exists( "foo", $name ) ) {
$_SESSION[ $name ] = $value;
}
}
public function __get( $name ) {
if ( property_exists( "foo", $name ) ) {
return $_SESSION[ $name ];
}
}
public function __isset($propertyName){
return isset($_SESSION[$propertyName]);
}
}
$foo = new foo();
$foo->myproperty = "value";
if ( isset($foo->myproperty) ) {
echo "myproperty setted";
} else {
echo "myproperty not setted";
}
?>
请注意,这种方式empty()也可以工作,因为它在内部使用__isset()。
TA贡献1864条经验 获得超6个赞
isset
当您在类级别上已经有了神奇的__GET方法并且您已经在实现相同的功能时,您实际上不需要检查。代码中的第二个拼写错误是类名不是,new $foo();
而应该是new foo()
. 但是,我建议类名使用标题大小写,例如class Foo
.
class Foo {
private $myproperty;
public function __construct() {
if (
( !isset( $_SESSION ) ) &&
( session_status() == PHP_SESSION_NONE )
) {
session_start();
}
}
public function __set( $name, $value ) {
if ( property_exists( "foo", $name ) ) {
$_SESSION[ $name ] = $value;
}
}
public function __get( $name ) {
if ( property_exists( "foo", $name ) ) {
return $_SESSION[ $name ];
}
}
}
$foo = new Foo();
$foo->myproperty = "value";
if ( $foo->myproperty ) {
echo "myproperty setted";
} else {
echo "myproperty not setted";
}
不过,如果您仍在寻找如何使用isset,您可以将以下方法添加到您的class
public function __isset($name)
{
return isset($_SESSION[$name]);
}
- 2 回答
- 0 关注
- 89 浏览
添加回答
举报