Получить приватную переменную последнее значение вне класса OOPS

У меня есть один базовый класс, и я не могу изменить основной класс. Код моего основного класса приведен ниже

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);
}

Я не могу получить родительский класс $container array,

0

Решение

Попробуйте изменить расширенный класс, как показано ниже:

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;
}
}
3

Другие решения

Создайте функцию в базовом классе для вычисления количества контейнеров и используйте эту функцию в дочернем классе, чтобы получить общее количество контейнеров.

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

Теперь вызовите эту функцию countContainer в дочернем классе.

-1

По вопросам рекламы [email protected]