【问题标题】:PHP invisible class propertiesPHP 不可见的类属性
【发布时间】:2010-12-09 06:53:49
【问题描述】:

好的,我知道我可以拥有私有属性来防止属性在类外使用,但是否也可以使该属性在类外不可见?

我的意思是,如果我在课堂上进行print_r()foreach(),是否有可能采取一种方法使该属性甚至不显示?

【问题讨论】:

  • 我记得前段时间有一个关于这个的讨论,并且有一些 PHP 版本没有显示这些属性。可惜我暂时找不到。有什么特殊的理由不希望它们显示吗?反射仍然可以用来看到它们。
  • 这里有两个错误报告,bugs.php.net/bug.php?id=39118&edit=2bugs.php.net/bug.php?id=35822&edit=1。正如您在响应中看到的那样,这不是错误,而是一项功能。

标签: php class properties


【解决方案1】:

global 在你的所有方法中使用一些不起眼的变量名,并像属性一样使用它们

我永远不想看到它完成,我也不知道您为什么要隐藏属性以防止开发人员检查,但我想它会起作用。

【讨论】:

  • 我正在为我的框架为 php 创建一个活动记录类,每个记录都是它自己的一个类,数据作为属性。我已经在每条记录中实现了一个保存方法,但要让它工作,它需要使用一个带有数据库类的属性。当我循环遍历记录时,我不想编写额外的代码来删除该属性,所以我希望有一种方法可以隐藏该属性。和你一样,我也认为使用全局变量是不明智的,但我可能不得不这样做。
【解决方案2】:

您不能隐藏调试函数的属性,例如 print_r/var_dump。但是,您可以做的是使用__get/__set 模拟属性,如下所示:

 <?php
 class MyClass {
   public function __get($name) {
      if($name == "bar") {
       /* take bar from somewhere */
      }
   }
   public function __set($name, $value) {
      if($name == "bar") {
       /* store $value somewhere */
      }
   }
 }

 $foo = new MyClass();
 $foo->bar = 1;

这样,您可以像使用属性一样使用 $foo->bar,即使实际上在执行 var_dump 等操作时不存在此类属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-27
    • 2011-03-02
    • 1970-01-01
    • 2013-06-13
    • 2011-07-17
    • 2015-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多