Подтвердить что ты не робот

PHP: статические и нестатические функции и объекты

Какая разница между этими вызовами объекта?

Нестатический:

$var = new Object;
$var->function();

Static

$var = User::function();

А также внутри a class зачем использовать статическое свойство для функций?

Пример:

static public function doSomething(){
    ...code...
}
4b9b3361

Ответ 1

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

Ответ 2

Разница находится в области переменных. Представьте, что у вас есть:

class Student{
    public $age;
    static $generation = 2006;

   public function readPublic(){
       return $this->age;  
   }

   public static function readStatic(){
       return $this->age;         // case 1
       return $student1->age;    // case 2 
       return self::$generation;    // case 3 

   }
}

$student1 = new Student();
Student::readStatic();
  • Статическая функция не может знать, что такое $this, потому что она статична. Если бы это могло быть $this, это принадлежало бы $student1, а не Student.

  • Он также не знает, что такое $student1.

  • Это работает для случая 3, потому что это статическая переменная, принадлежащая классу, в отличие от предыдущих 2, которые принадлежат объектам, которые должны быть созданы.

Ответ 3

Статические методы и члены принадлежат самому классу, а не экземпляру класса.

Ответ 4

Статические функции или поля не зависят от инициализации; следовательно, статический.

Ответ 5

Вопросы относительно функций STATIC продолжают возвращаться.

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

class Example {

    // property declaration
    public $value = "The text in the property";

    // method declaration
    public function displayValue() {
        echo $this->value;
    }

    static function displayText() {
        echo "The text from the static function";
    }
}


$instance = new Example();
$instance->displayValue();

$instance->displayText();

// Example::displayValue();         // Direct call to a non static function not allowed

Example::displayText();