需要php类清晰度

时间:2011-03-01 13:41:16

标签: php class

我知道非常基础,但我正在学习:)

所以,我有这个课程:

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语句,然后执行一些代码?

有什么想法吗?

3 个答案:

答案 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;
}