我知道非常基础,但我正在学习:)
所以,我有这个课程:
class RequestPath {
private $parts = array();
public function __construct() {
if (isset($_SERVER['PATH_INFO'])) {
$path = (substr($_SERVER['PATH_INFO'], -1) == "/") ? substr($_SERVER['PATH_INFO'], 0, -1) : $_SERVER['PATH_INFO'];
} else {
$path = (substr($_SERVER['REQUEST_URI'], -1) == "/") ? substr($_SERVER['REQUEST_URI'], 0, -1) : $_SERVER['REQUEST_URI'];
}
$bits = explode("/", substr($path, 1));
$parsed['id'] = array_shift($bits); $parsed[] = $parsed['id'];
$parsed['type'] = array_shift($bits); $parsed[] = $parsed['type'];
$parts_size = sizeof($bits); if ($parts_size % 2 != 0) {
$parts_size -= 1;
}
for ($i = 0; $i < $parts_size; $i+=2) { $parsed[$bits[$i]] = $bits[$i+1]; $parsed[] = $bits[$i+1];
}
if (sizeof($bits) % 2 != 0) { $parsed[] = array_pop($bits);
}
$this->parts = $parsed;
}
public function __get($key) {
return $this->parts[$key];
}
public function __set($key, $value) {
$this->_parts[$key] = $value;
}
public function __isset($key) {
return isset($this->_parts[$key]);
}
}
我在从公共函数__get,__ set和__isset返回数据时遇到问题。
我想做的是在__isset上运行一个简单的if语句,然后执行一些代码?
有什么想法吗?
答案 0 :(得分:3)
删除_
中的$this->_parts
因为代码中没有这样的变量
答案 1 :(得分:2)
如果我理解你的问题你想做这样的事情吗?
$path = new RequestPath();
if(isset($path["foo"])) {
$x = 1;
} else {
$x = 2;
}
你的__set和__isset代码也有拼写错误。
你应该得到一个未定义的变量警告,因为你在那里写了->_parts
而不是->parts
。
启用display_errors并将error_reporting设置为包含at least
E_NOTICE,这样您就不会在没有注意到的情况下遇到这些问题。 (在这种情况下没有帮助,因为__get和__set捕获该调用,但一般来说它是建议的)
答案 2 :(得分:1)
伙计们感谢您的提示,确实需要下划线,但最终的解决方案是:
$ path = new RequestPath();
if(isset($path->foo)) {
$x = 1;
} else {
$x = 2;
}