开发者社区> 问答> 正文

PHP手册中property_exists的范例是不是出错了?? 400 报错

PHP手册中property_exists的范例是不是出错了?? 400 报错

刚才看函数property_exists

下面示例代码:

<?php

class myClass {
    public $mine;
    private $xpto;

    static function test() {
        var_dump(property_exists('myClass', 'xpto')); // true, it can be accessed from here
    }
}

var_dump(property_exists('myClass', 'mine'));   //true
var_dump(property_exists(new myClass, 'mine')); //true
var_dump(property_exists('myClass', 'xpto'));   //false, isn't public myClass::test();
?> 

我在本地测试了一下,显示结果为

bool(true) bool(true) bool(true) bool(true)

都为true,我的是PHP5.3.3

这个怎么解释呢?

展开
收起
爱吃鱼的程序员 2020-06-04 15:20:13 419 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    Note that before PHP 5.3.3, this function fails for private properties in base classes (which is fixed in 5.3.3)

    <?php class Base { private $var = 1;

        public function test() {
                var_dump( property_exists( $this, 'var' ) );
        }
    

    }

    class Derived extends Base { }

    $b = new Base(); $b->test(); $d = new Derived(); $d->test(); ?>

    Executing this code with PHP 5.0 <= x < 5.3 this script echoes (incorrect result):
    bool(true)
    bool(false)

    Executing this code with PHP 5.3 this script echoes (correct result):
     bool(true)
     bool(true)

     在php5.3.3中已经修复了这个问题。你的例子的测试结果是在5.3.3版本之前得出的,所以有一定的出入。在php5.3.3中得出全部ture的结果是正常的。

    引自:http://cn2.php.net/property_exists

     


    ######

    引用来自“cloes”的答案

    Note that before PHP 5.3.3, this function fails for private properties in base classes (which is fixed in 5.3.3)
    <?php
    class Base {
            private $var = 1;
    
            public function test() {
                    var_dump( property_exists( $this, 'var' ) );
            }
    }
    
    class Derived extends Base {
    }
    
    $b = new Base();
    $b->test();
    $d = new Derived();
    $d->test();
    ?>

    Executing this code with PHP 5.0 <= x < 5.3 this script echoes (incorrect result):
    bool(true)
    bool(false)

    Executing this code with PHP 5.3 this script echoes (correct result):
     bool(true)
     bool(true)

     在php5.3.3中已经修复了这个问题。你的例子的测试结果是在5.3.3版本之前得出的,所以有一定的出入。在php5.3.3中得出全部ture的结果是正常的。

    引自:http://cn2.php.net/property_exists

     


    多谢您的解答,现在明白了!
    2020-06-04 16:01:52
    赞同 展开评论 打赏
问答分类:
PHP
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载