PHP - 可通过Class访问的私有变量

时间:2018-01-08 19:31:00

标签: php class private-members

我正在开发一个看起来像这样的PHP类:

<?php
    class xyz{
           public $car1;
           public $car2;
           private $owner;

            public function __construct ($type){
              $this->car1 = $type;
              $this->owner = "John";
              return $this->owner();
          }
            private function owner(){
             return "Owner of ".$this->car1." is ".$this->owner;
          }

现在,当我通过其他代码调用此类时出现问题,我可以轻松访问私有变量并且返回函数无法正常工作。

以下是样本:

  <?php
    $car = new xyz("Sedan");
    echo $car; //Expected result: Owner of Sedan is John.
   ?>

如果我打印$ car,这就是我得到的

 Object ( [car1] => Sedan [car2] => "" [owner:xyz:private] => John )

如何实现我想要的结果?如何保护私人变量?

所有的帮助和建议将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分:3)

  1. 构造函数不应返回任何值。类构造函数应该在创建新实例时初始化对象(例如,当您编写$car = new xyz("sedan");时,所以您返回的任何内容都无处可去。在类中创建其他方法以返回值。
  2. 如果要回显所有者,请将owner方法设为public并执行`echo $ car-&gt; owner();“。该方法返回一个字符串,然后回显该字符串。简单。
  3. 直接回应对象应该会导致php 7出错,也许你正在运行一个旧版本的php,它会返回你所看到的内容,如果你调用var_dump($car);会发生这种情况。如果要控制对象如何转换为字符串,则需要覆盖__toString方法(请参阅php documentation)。
  4. 属性和方法可见性关键字工作正常,如果您尝试使用$car->owner$car->owner()而不更改可见性,则会看到错误。