PHP OOP – постоянные и статические переменные?

В PHP, в чем разница между:

  1. Константы и статические переменные?
  2. Расширение класса и создание его объекта?

Я знаю, как их можно использовать, но я не могу четко различать их.

Solutions Collecting From Web of "PHP OOP – постоянные и статические переменные?"

Статический для:

свойства класса или методы как статические делает их доступными без необходимости создания экземпляра класса

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

Константа :

должно быть постоянным выражением, а не (например) переменной, свойством, результатом математической операции или вызовом функции.

Таким образом, он всегда возвращает тот же результат, когда вы его вызываете

О создании объекта и расширении класса, когда вы «создаете объект», вы создаете экземпляр класса . Когда вы расширяете класс , вы создаете другой класс, который:

наследует все общедоступные и защищенные методы от родительского класса. Если класс не отменяет эти методы, они сохранят свою первоначальную функциональность.

Надеюсь, это вам поможет.

сравнение

статический

  1. Может иметь модификатор доступа.

    class A{ public static $public_static = "can access from anywhere"; protected static $protected_static = "can access from inheriting classes"; private static $private_static = "can access only inside the class"; } 
  2. В зависимости от видимости вы можете получить доступ к статическим переменным.

     //inside the class self::$variable_name; static::$variable_name; //outside the class class_name::$variable_name; 
  3. Может изменить значение после объявления.

      self::$variable_name = "New Value"; static::$variable_name = "New Value"; 
  4. Не нужно инициализировать при объявлении.

      public static $variable_name; 
  5. Применяются правила объявления обычной переменной (например: начинается с $)

  6. Может создавать внутри функции.

      class A{ function my_function(){ static $val = 12; echo ++$val; //13 } } 

постоянная

  1. Всегда публичные не могут устанавливать модификаторы доступа.

     class A{ const my_constant = "constant value"; public const wrong_constant="wrong" // produce a parse error } 
  2. В любом месте вы можете получить доступ к постоянному.

     //inside the class self::variable_name; static::variable_name; //outside the class class_name::variable_name; 
  3. Невозможно изменить значение после объявления.

     self::variable_name = "cannot change"; //produce a parse error 
  4. Должен инициализироваться при объявлении.

     class A{ const my_constant = "constant value";// Fine const wrong_constant;// produce a parse error } 
  5. Не следует использовать $ в начале переменной (применяются другие правила переменных).

      class A{ const my_constant = "constant value";// Fine const $wrong_constant="wrong";// produce a parse error } 
  6. Невозможно объявить внутри функции.


При расширении

  class A{ public static $public_static = "can access from anywhere"; protected static $protected_static = "can access from inheriting classes"; private static $private_static = "can access only inside the class"; const my_constant = "Constant value"; } class B extends A{ function output(){ // you can use self or static echo self::$public_static; //can access from anywhere; echo self::$protected_static; //can access from inheriting classes; self::$protected_static = "Changed value from Class B"; echo self::$protected_static; //"Changed value from Class B"; echo self::$private_static; //Produce Fatal Error echo self::my_constant;//Constant value } } 

Постоянная константа и не может изменить ее значение после назначения. С другой стороны, статическая переменная может иметь разные значения. Например, вы можете создать статическую переменную внутри функции, чтобы узнать, сколько раз функция вызывалась. Значение будет изменяться каждый раз, когда функция вызывается, например, если вы выполняете $i++ где $istatic переменная.

Что касается extending a class and creating its object , это называется наследованием, ознакомьтесь с этим сообщением, чтобы узнать больше об этом:

  • PHP – Наследование

Константная переменная – это переменная, к которой можно получить доступ по имени класса и НЕ может быть изменено во время выполнения сценария. Классическую статическую переменную также можно получить по имени класса, но ее можно изменить во время выполнения программы.

Второй вопрос – это ПОЛНОСТЬЮ другие вещи. Подробнее об объектно-ориентированном программировании (не только в PHP)

Одно важное различие заключается в распределении памяти.

Когда создается экземпляр класса (объекта), память выделяется для вновь созданного объекта. Имя static является после распределения памяти. То есть память для статических объектов выделяется только один раз, статически. Когда объект изменяет его статическое свойство, он отражается на всех объектах одного класса.

 <?php class Test { static $test = "world!"; static function hello() { echo "\nhello " . self::$test . "\n"; } } $t = new Test(); $x = new Test(); $t->hello(); // prints 'hello world!' $t::$test = "Hmmm..."; $t->hello(); // prints 'hello Hmmm...' $x->hello(); // prints 'hello Hmmm...' 

Причина, по которой вы хотите использовать статическую переменную-член / функцию, заключается в том, что вы можете извлекать информацию об этом классе, не создавая экземпляр (что стоит меньше затрат на процессор).

Константная переменная является отдельной для каждого объекта. Но статическая переменная является общей для всех объектов этого класса. Каждый объект имеет одну статическую переменную. Статическая переменная, созданная на уровне класса. Постоянная переменная, созданная на уровне экземпляра.