Мне интересно, имеет ли PHP тип переменной в классах, которые работают как статические на других языках. И я имею в виду, что все объекты одного и того же класса используют одну и ту же переменную, и когда она обновляется на одном, она обновляется на каждом из них. Static близок, потому что он доступен для всех объектов, но мне нужно его обновить. Должен ли я использовать глобалы для этого?
Я думаю, что статическое – это то, что вы хотите. Вы можете обновить статическую переменную, вам просто нужно сделать это в «статическом контексте» (т. Е. С помощью оператора ::.
class Class1 { protected static $_count = 0; public function incrementCount() { return self::$_count++; } } $instance1 = new Class1(); $instance2 = new Class1(); var_dump($instance1->incrementCount(), $instance2->incrementCount());
выведет:
int 0
int 1
Правильный ответ заключается в том, что в PHP нет эквивалента в финале, но статичность в любом случае похожа на то, что вы хотели.
static имеет свойство, что оно будет иметь одинаковое значение во всех экземплярах класса, потому что оно не привязано к конкретному экземпляру.
Вам нужно будет использовать оператор :: для доступа к нему, поскольку, будучи статичным, вы не можете использовать -> .
Вы можете обновить статические свойства:
class A { protected static $_foo = 0; public function increment() { self::$_foo++; } public function getFoo() { return self::$_foo; } } $instanceOne = new A(); $instanceTwo = new A(); $instanceOne->getFoo(); // returns 0 $instanceTwo->increment(); $instanceOne->getFoo(); // returns 1
Вы можете просто создавать переменные в файле PHP, например, Constants.
–Constants.php– $ DATABASE_NAME = "mysql"
и включить файл в ваш файл. Вы можете изменить его значение. Он приближается к тому, что вы хотите, но не стоит называть их константами, потому что константы не предназначены для изменения, вот что меня смутило :).
Я думаю, что static
– это ключевое слово, которое вы ищете.
И нет ничего, что предотвращало бы static
свойство beeing «обновляется» в PHP: оно инициализируется при первом запуске, оно сохраняет значение во время выполнения PHP-скрипта, но вы определенно можете установить его на новое значение.
Я не понимаю, почему создание переменной static не работает для того, что вы описали (но это не имеет ничего общего с ключевым словом final)?
<?php class Bla { public static $var; public function __construct() { Bla::$var = Bla::$var + 1; } } $test = new Bla(); echo Bla::$var; // 1 $test = new Bla(); echo Bla::$var; // 2 ?>