正常和魔法getter和setter方法之间的区别
-
24-09-2019 - |
题
我使用的是魔术的getter / setter类我的会话变量,但我没有看到正常的getter和setter方法有什么区别。
代码:
class session
{
public function __set($name, $value)
{
$_SESSION[$name] = $value;
}
public function __unset($name)
{
unset($_SESSION[$name]);
}
public function __get($name)
{
if(isset($_SESSION[$name]))
{
return $_SESSION[$name];
}
}
}
现在我注意到的第一件事是,我要呼吁$session->_unset('var_name')
删除的变量,没有什么“神奇”有关。
其次,当我尝试使用$session->some_var
这不起作用。我只可使用$_SESSION['some_var']
获取会话变量。
我已经看过PHP手册但功能看起来一样矿。
我做得不对,或者是有没有真正神奇的东西有关这些功能。
解决方案
第一个问题,当你调用
unset($session->var_name);
它应该是与调用
$session->_unset('var_name');
关于不能够使用__get();什么不起作用?什么变量获取设置并警告内容中给出。确保已设置 error_reporting()
以E_ALL。
这也可能是检查你调用 session_start
个好主意一>
其他提示
我想getter和setter者为类内部变量?
class SomeClass {
private $someProperty;
function __get($name) {
if($name == 'someProperty') return $this->someProperty;
}
function __set($name, $value) {
if($name == 'someProperty') $this->someProperty = $value;
}
}
$someClass = new SomeClass();
$someClass->someProperty = 'value';
echo $someClass->someProperty;
class session { /* ...as posted in the question ... */ }
session_start();
$s = new session;
$s->foo = 123;
$s->bar = 456;
print_r($_SESSION);
unset($s->bar);
print_r($_SESSION);
打印
Array
(
[foo] => 123
[bar] => 456
)
Array
(
[foo] => 123
)
确定,也许不是 “神奇”。但是,按预期工作。结果 如果这不是你想要的请详细说明...
这是我的理解至今约神奇的功能
请纠正我,如果我错了......
<强> $ SESSION是一个数组而非对象 因此可以使用$会话[“字段”]和不会话而$>访问它们字段
神奇的功能让你的任何函数之前使用函数名__fnName 为
fnNameNewField($值);
因此,它将被分离成作为新野密钥和将被发送到__fnName和算子的研究将完成在此
例如: setNewId($值)将与键被发送到__set()= NEW_ID和参数...
不隶属于 StackOverflow