Мне интересно, есть ли в PHP тип переменной в классах, который работает как статический на других языках. И под этим я подразумеваю, что все объекты одного и того же класса используют одну и ту же переменную, и когда она обновляется для одного, она обновляется для всех. Static близок, потому что он является общим для всех объектов, но мне нужно иметь возможность его обновлять. Придется ли мне использовать глобальные переменные для этого?
Что PHP-эквивалент статической переменной в других языках?
Ответы (6)
Я думаю, что статика - это то, что вам нужно. Вы можете обновить статическую переменную, вам просто нужно сделать это в «статическом контексте» (то есть с помощью оператора ::.
class Class1 {
protected static $_count = 0;
public function incrementCount() {
return self::$_count++;
}
}
$instance1 = new Class1();
$instance2 = new Class1();
var_dump($instance1->incrementCount(), $instance2->incrementCount());
выведет:
целое 0
целое 1
Правильный ответ заключается в том, что в PHP нет эквивалента final, но static в любом случае кажется тем, чего вы хотели в первую очередь.
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
в 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
?>