Чудя се дали PHP има тип променлива в класове, която функционира като статична в други езици. И с това имам предвид, че всички обекти от един и същи клас използват една и съща променлива и когато се актуализира на един, се актуализира на всеки един. Статичното е близо, защото се споделя във всички обекти, но трябва да мога да го актуализирам. Ще трябва ли да използвам глобални за това?
Какъв е 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());
ще изведе:
int 0
int 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
?>