PHP: статические и нестатические функции и объекты - PullRequest
30 голосов
/ 06 декабря 2010

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

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

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

Статическая:

$var = User::function();

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

пример:

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

Ответы [ 5 ]

39 голосов
/ 06 декабря 2010

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

10 голосов
/ 29 января 2016

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

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();
  1. Ваша статическая функция не может знать, что такое $ this, потому что она статическая.Если бы мог быть $ this, он принадлежал бы $ student1, а не Student.

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

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

7 голосов
/ 06 декабря 2010

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

7 голосов
/ 06 декабря 2010

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

1 голос
/ 21 февраля 2018

Вопросы о функциях 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...