2010-12-05 16 views
26

¿Cuál es la diferencia entre estos llamamientos de objeto?PHP: funciones y objetos estáticos y no estáticos

no estática:

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

estática:

$var = User::function(); 

Y también dentro de un class ¿por qué debería utilizar la propiedad estática para las funciones?

ejemplo:

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

-1 me parece que su última pocos cuestionan eran sobre las funciones básicas del lenguaje. le sugiero que lea sobre el manual de PHP o cualquier libro primero. repetidamente pidiendo explicaciones básicas sintaxis es inconveniente – mario

+19

@mario. Un poco duro. Tal vez cirk leyó el manual y no entendió el concepto. Parece justo pedirle a los compañeros programadores algo de información. – Ben

+1

@Ben. Tal vez demasiado duro. Pero no quería rechazarlo sin comentarios o simplemente un enlace * RTFM *. Y mi suposición es que realmente lo leyó en algún momento re, pero pidió una "segunda opinión" aquí. Lo cual estaría más bien, si solo él hubiera dicho eso. – mario

Respuesta

33

Las funciones estáticas, por definición, no pueden y no dependen de ninguna propiedad de instancia de la clase. Es decir, no requieren una instancia de la clase para ejecutarse (y, por lo tanto, se pueden ejecutar como lo ha demostrado sin crear primero una instancia). En cierto sentido, esto significa que la función no depende (y nunca deberá) de los miembros o métodos (públicos o privados) de la clase.

+3

¿Cuál es el punto de colocar funciones estáticas dentro de una clase en lugar de, por ejemplo, en un archivo functions.php separado? – billmalarky

+8

@billmalarky No es esencial, pero al menos lo ayuda a organizar sus funciones en un archivo donde son relevantes. Para mí, es más fácil y más lógico tener una función como ' usuario :: algunaFuncion();' en lugar de 'Función :: someUserFunction;' y ciertamente mejor que 'algunaFuncion();' – AL2

7

Los métodos estáticos y los miembros pertenecen a la clase en sí y no a la instancia de una clase.

7

Las funciones o campos estáticos no dependen de la inicialización; por lo tanto, estático.

7

La diferencia está en el alcance variable. Imagine que tiene:

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. Usted función estática no se puede saber lo que es $ esto porque es estático. Si pudiera haber un $ this, habría pertenecido a $ student1 y no a Student.

  2. Tampoco sabe qué es $ student1.

  3. Funciona para el caso 3 porque es una variable estática que pertenece a la clase, a diferencia del anterior 2, que pertenece a los objetos que deben crearse.

0

Las preguntas acerca de las funciones de STATIC siguen volviendo.

Las funciones estáticas, por definición, no pueden y no dependen de ninguna propiedad de instancia de la clase. Es decir, no requieren una instancia de la clase para ejecutarse (y así se pueden ejecutar. En cierto sentido, esto significa que la función no depende (y nunca deberá) de los miembros o métodos (públicos o privados)) de la clase.

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(); 
Cuestiones relacionadas