Обратиться к статической переменной класса

Нужно при создании объекта добавить его в массив, но при дампе говорит что массив пуст, что я делаю не так?

class apple
{
    private $arr_cou = 0;
    public $date;
    public $status;
    public $Aple_persent;
    public static $apples = array();


    function __construct($obj)
    {
        $this->date         = 0;
        $this->status       = 0;
        $this->Aple_persent = 0;
        $apples[$arr_cou]   = $obj;
        $arr_cou++;
    }
}

$a = new apple($a);

Ответы (2 шт):

Автор решения: Максим Степанов

К статическому свойству нельзя обращаться просто через $, нужно использовать self::.

Вы можете класс в простейшем случае исправить так:

<?php

class apple{
    public $date;
    public $status;
    public $Aple_persent;
    public static $apples = array();

    function __construct() {
        $this->date=0;
        $this->status = 0;
        $this->Aple_persent = 0;
        self::$apples[] = $this;    // сохраняйте объект в массив, ключ указывать не обязательно
    }

    // добавить статическую публичную функцию, которая будет доставать количество объектов в `$apples`
    public static function count()
    {
        return count(self::$apples);
    }
}
$a = new apple();
$b = new apple();
$c = new apple();

var_dump(apple::count());   // 3
→ Ссылка
Автор решения: Alexey Bril

Обращаясь к статическому свойству класса вы должны указать ключевое слово self

https://www.php.net/manual/ru/language.oop5.static.php

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

иными словами это:

$apples[$arr_cou] = $obj;

измените на это:

self::$apples[$this->arr_cou] = $obj;
$this->arr_cou++;
→ Ссылка