Php 普通二传手和魔术二传手的区别
我正在为会话变量使用一个神奇的getter/setter类,但我看不到普通setter和getter之间有什么区别 守则:Php 普通二传手和魔术二传手的区别,php,getter-setter,magic-function,Php,Getter Setter,Magic Function,我正在为会话变量使用一个神奇的getter/setter类,但我看不到普通setter和getter之间有什么区别 守则: class session { public function __set($name, $value) { $_SESSION[$name] = $value; } public function __unset($name) { unset($_SESSION[$name]); }
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->\u unset('var\u name')
来删除变量,这并没有什么“神奇”之处
其次,当我尝试使用$session->some\u var
时,这不起作用。我只能使用$\u session['some\u var']
获取会话变量
我看过PHP手册,但是函数看起来和我的一样
是我做错了什么,还是这些函数真的没有什么神奇之处。我以为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;
第一期,当你打电话时
unset($session->var_name);
应该和打电话一样
$session->_unset('var_name');
关于不能使用_get();什么不起作用?变量设置为什么以及给出了什么警告。确保您已设置为E_ALL
检查一下你打过电话也可能是个好主意
印刷品
Array
(
[foo] => 123
[bar] => 456
)
Array
(
[foo] => 123
)
好吧,也许不是“神奇的”。但效果与预期一致。如果这不是您想要的,请详细说明…这是我到目前为止对魔法函数的理解 如果我错了,请纠正我 $SESSION是一个数组,而不是一个对象 因此,您可以使用$session['field']而不是$session->field来访问它们 魔法函数允许您在任何函数之前使用函数名 fnNameNewField($value) 因此,它将被分割成NewField作为键,并将发送到_fnName,并在此基础上进行操作 例如:
setNewId($value)将被发送到uuu set(),key=new\u id和参数…这是一个问题而不是答案。第二,神奇的功能就是这样。功能。它们可以访问的限制与普通函数相同,因此没有理由不能从外部源返回值。例如,条令从数据库获取和设置值。不,您不再需要在函数中定义变量。这是我理解的“魔力”的一部分。当你仅仅调用$someclass->variable=10;如果这个变量不存在,它会生成这个变量。哦,是的,集合和get正在工作。我在测试中引用了错误的变量+1并感谢您提供了unset方法的正确语法。将使用以下语法:unset($session->var_name);“如果没有魔法就不起作用吗?”赛义夫说,“不,没有。”。如果你想使用
unset
你必须定义\uu unset
函数。至少如果没有这个u unset()方法,它不会对会话产生影响。好了,我现在明白了。我也会用它自己做一些测试。至少我现在知道我在正确的轨道上!是的,这就是我想要的。我在代码中犯了一些愚蠢的错误,很抱歉。这很好,只是unset的正确语法对我来说不清楚。然而,它是这样工作的。
Array
(
[foo] => 123
[bar] => 456
)
Array
(
[foo] => 123
)