【问题标题】:Get private variable last value out side of class OOPS获取类 OOPS 之外的私有变量最后一个值
【发布时间】:2016-04-28 16:47:45
【问题描述】:

我有一个核心类,我不能修改核心类。我的核心类代码如下

class Test
{
    private $container = [];
    public function sample($input)
    {
            return array_push($this->container, $input);
    }
}

下面是我的扩展类

class Size extends Test
{  
  private $maxSize = 10;
  public function sizeadd($element)
  {
      //I want get the parent container 
        return parent::sample($element);
  }
}

我已使用以下代码添加值

$sizeval = new Size(); 
$sizeval->sizeadd('1');
$sizeval->sizeadd('2');

值添加成功。但我的问题是我只想添加 10 个值,所以我想要父类中的 count($this->container)。然后我想检查sizeadd函数看起来像这样

public function sizeadd($element)
      {
          if(count(container count)< $this->maxSize)
            return parent::sample($element);
      }

我无法获取父类$containerarray

【问题讨论】:

  • 当然不能,它是私有的,仅在 Test 类中可用。
  • Test类中没有获取$container的大小/计数的方法吗?
  • 我想从我的子类中获取最后一个带有值的 $container 数组
  • @mapek:理论上不应该有任何方法可以得到它。如果存在,则通常将其视为错误(通常归类为安全错误)。但是很多人都经历过你现在所经历的(尤其是在 Windows 和 MFC 的早期)。所以你会发现很多 OO 语言不支持私有变量(例如 javascript),甚至在所有未来版本(Perl)中完全拒绝支持私有变量。如果您的语言支持私有变量,那么对不起,这是不可能的(或者不应该是不可能的)。

标签: php oop stack private


【解决方案1】:

尝试如下更改扩展类:

class Size extends Test
{

    private $maxSize = 10;

    /**
     * To track how many elements are being added
     * 
     * @var integer
     */
    private static $count = 0;

    /**
     * Adding element in size
     * 
     * @param integer $element
     * @return integer
     */
    public function sizeadd($element)
    {
        if (self::$count < $this->maxSize) {
            self::$count = self::$count + 1;
            return parent::sample($element);
        }
    }

    /**
     * This is just for getting the current number of count
     * this is optional method.
     * @return integer
     */
    public function getCount() 
    {
        return self::$count;
    }
}

【讨论】:

  • 如果我想获得 $container 数组意味着任何其他方法。
  • 不,你不能得到它,因为 $container 是私有变量,它不允许在类之外访问。 sizeadd 方法的一些修改,当值被添加到父容器中时,它也将作为`private static $tempArray = array(); 添加到子临时数组中。公共函数 sizeadd($element) { if (self::$count maxSize) { self::$count = self::$count + 1;自我::$tempArray[] = $element;返回父级::sample($element); } } ` 但在我看来这不是一个好主意。
【解决方案2】:

在基类中创建一个函数来计算容器数量,并在子类中使用该函数来获取容器的总数。

class Test
{
    private $container = [];
    public function sample($input)
    {
            return array_push($this->container, $input);
    }
    // counts container
    public function countContainer(){
         return count($this->container);
    }
}

现在在子类中调用这个 countContainer 函数。

【讨论】:

  • 测试是我的核心课程。我无法在该类上添加额外的函数或额外的变量。我只有权访问扩展类
猜你喜欢
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2022-09-23
  • 2018-01-29
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 2017-11-28
相关资源
最近更新 更多