0

我正在编写一个可以检查权限和内容的脚本,但我偶然发现了一些奇怪的东西。

我的权限脚本可以检查系统和功能,看看是否允许用户使用 m。

我会用一些代码来解释:

if(permission::check('factbounce', 'magklik')){
echo ' Yep good ';
} else {    
echo 'Nope not good';
}

这里我有一个系统 factbounce 和一个函数 magklik,现在在权限类中:

public static function check($systemCode, $functionCode = null ){
        $instance = self::get();

        if($instance->checkSystem($systemCode)){            
            if(is_null($functionCode))
                return true;

            if(!$instance->checkSystemFunction($functionCode))
                return false;

            return true;

        }   

        return false;
    }

这段代码将触发checkSystemFunction,并将检查 magklik:

private function checkSystemFunction ( $functionCode ){

    if(!self::$oSystemFunction)
        self::$oSystemFunction = org_system_function::getByCode($functionCode);

    if(!is_object(self::$oSystemFunction));
        echo 'No Object';

    echo '<pre>'.print_r(self::$oSystemFunction, true).'</pre>';

    if(!self::$oSystemPermission->checkFunctionPermission(self::$oMedewerker, self::$oSystemFunction))
        return false;

    return true;        

}   

代码的输出是这样的:

No Object
org_system_function Object
(
    [primaryKey] => org_system_function_id
    [table] => org_system_function
    [arAssoc] => Array
        (
            [function_id] => 1
            [name] => May click around
            [code] => magklik
            [description] => do what you want
        )

)
Yep good

我不明白为什么它说没有对象,很明显当我打印它时它是一个对象。

4

2 回答 2

8

您正在if用尾随终止您的子句;

if (!is_object(self::$oSystemFunction));
    echo 'No Object';

所以echo 'No Object'总会被执行。

于 2013-09-11T21:05:40.813 回答
4

if用分号结束你的陈述。因此, echo 语句正在正常处理,并且每次运行脚本时都会执行。

这应该有效:

if(!is_object(self::$oSystemFunction)) 
    echo 'No Object';

但是用花括号分隔 if else 块总是一个好主意。

if(!is_object(self::$oSystemFunction)) {
    echo 'No Object';
}

这增加了代码的可读性和可维护性。


一个例子来证明这一点:

$a = 1;
$b = 2;

if ($a == $b);
echo 'foo';

上面的代码输出:

foo

在此处查看演示。

于 2013-09-11T21:05:48.300 回答