Какъв е PHP еквивалентът на статична променлива на други езици?

Чудя се дали PHP има тип променлива в класове, която функционира като статична в други езици. И с това имам предвид, че всички обекти от един и същи клас използват една и съща променлива и когато се актуализира на един, се актуализира на всеки един. Статичното е близо, защото се споделя във всички обекти, но трябва да мога да го актуализирам. Ще трябва ли да използвам глобални за това?


person fent    schedule 29.07.2009    source източник
comment
От кога не можете да актуализирате статичните свойства?   -  person jason    schedule 29.07.2009
comment
Статичните променливи могат да бъдат модифицирани...   -  person Michael Burr    schedule 29.07.2009
comment
Const променливите не могат да бъдат модифицирани; статичните променливи могат да бъдат.   -  person Extrakun    schedule 29.07.2009
comment
И „final“ е нещо на Java, а не на C, и няма нищо общо с правенето на променлива „class shared“.   -  person Michael Burr    schedule 29.07.2009


Отговори (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

person Brenton Alker    schedule 29.07.2009
comment
Това беше проблемът. Използвах $this вместо ::. - person fent; 29.07.2009

Правилният отговор е, че в PHP няма еквивалент на final, но static така или иначе изглежда като това, което сте искали на първо място.

static има свойството, че ще има една и съща стойност във всички екземпляри на клас, тъй като не е обвързан с конкретен екземпляр.

Ще трябва да използвате оператора :: за достъп до него, защото тъй като е статичен, не можете да използвате ->.

person thomasrutter    schedule 29.07.2009

Вие можете да актуализирате статичните свойства:

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
person jason    schedule 29.07.2009

Можете просто да създадете променливи в PHP файл, да речем с име Constants.

--Constants.php-- $DATABASE_NAME = "mysql"

и включете файла във вашия файл. Можете да промените стойността му. Доближава се до това, което искате, но не е добре да ги наричате константи, защото константите не са предназначени да се променят, това ме обърка :).

person Dhruva Sagar    schedule 29.07.2009

Мисля, че static е ключовата дума, която търсят.

И нищо не пречи на свойство static да бъде "актуализирано" в PHP: то се инициализира при първото му задаване, запазва стойността си по време на изпълнението на PHP скрипта, но определено можете да го зададете на нова стойност.

person Pascal MARTIN    schedule 29.07.2009

Не виждам защо правенето на променливата 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

?>
person Daff    schedule 29.07.2009