php - remove - strip_tags wordpress
Nuevo yo contra nueva estática (3)
¿Obtendré los mismos resultados?
Realmente no. Sin embargo, no sé de una solución para PHP 5.2.
¿Cuál es la diferencia entre un
new self
y unanew static
?
self
refiere a la misma clase en la que se escribe la new
palabra clave.
static
, en los enlaces estáticos tardíos de PHP 5.3, se refiere a cualquier clase en la jerarquía en la que llamó al método.
En el siguiente ejemplo, B
hereda ambos métodos de A
La self
invocación está vinculada a A
porque está definida en la implementación de A del primer método, mientras que static
está vinculada a la clase llamada (consulte también get_called_class()
).
class A {
public static function get_self() {
return new self();
}
public static function get_static() {
return new static();
}
}
class B extends A {}
echo get_class(B::get_self()); // A
echo get_class(B::get_static()); // B
echo get_class(A::get_self()); // A
echo get_class(A::get_static()); // A
Estoy convirtiendo una biblioteca de PHP 5.3 para trabajar en PHP 5.2. Lo principal que se interpone en mi camino es el uso del enlace estático tardío como return new static($options);
, si convierto esto para return new self($options)
, ¿obtendré los mismos resultados?
¿Cuál es la diferencia entre un new self
y una new static
?
Además de las respuestas de otros:
static :: se computará utilizando información de tiempo de ejecución.
Eso significa que no puede usar static::
en una propiedad de clase porque los valores de las propiedades:
Debe poder evaluarse en tiempo de compilación y no debe depender de la información de tiempo de ejecución.
class Foo {
public $name = static::class;
}
$Foo = new Foo;
echo $Foo->name; // Fatal error
Usando self::
class Foo {
public $name = self::class;
}
$Foo = new Foo;
echo $Foo->name; // Foo
Si el método de este código no es estático, puede obtener una get_class($this)
en 5.2 utilizando get_class($this)
.
class A {
public function create1() {
$class = get_class($this);
return new $class();
}
public function create2() {
return new static();
}
}
class B extends A {
}
$b = new B();
var_dump(get_class($b->create1()), get_class($b->create2()));
Los resultados:
string(1) "B"
string(1) "B"