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 關注
- 131 瀏覽
添加回答
舉報