variable una métodos metodo llamar funcion estáticos estática estatico estatica php oop static late-binding class-variables

una - self php 7



Obtener una propiedad estática de una instancia (8)

Debes entender lo que significa la propiedad estática. La propiedad o método estático no es para los objetos. Son utilizados directamente por la clase.

puedes acceder a ellos por

Class_name::static_property_name

Si tengo una instancia en PHP, ¿cuál es la forma más fácil de llegar a una propiedad estática (''variable de clase'') de esa instancia?

Esta

$classvars=get_class_vars(get_class($thing)); $property=$classvars[''property''];

Sonido realmente exagerado. Yo esperaría

$thing::property

o

$thing->property


Desde dentro de una instancia de clase puedes simplemente usar self::...

class Person { public static $name = ''Joe''; public function iam() { echo ''My name is '' . self::$name; } } $me = new Person(); $me->iam(); // displays "My name is Joe"


En estos días, hay una manera bastante simple y limpia de hacer esto.

<?php namespace Foo; class Bar { public static $baz=1; //... public function __toString() { return self::class; } } echo Bar::$baz; // returns 1 $bar = new Bar(); echo $bar::$baz; // returns 1

También puedes hacer esto con una propiedad en PHP 7.

<?php namespace Foo; class Bar { public static $baz=1; public $class=self::class; //... } $bar = new Bar(); echo $bar->class::$baz; // returns 1


Necesitas buscar primero el nombre de la clase:

$class = get_class($thing); $class::$property

$ propiedad debe definirse como static y public por supuesto.



Si prefieres no

$class = get_class($instance); $var = $class::$staticvar;

Porque encuentras que sus dos líneas son demasiado largas, tienes otras opciones disponibles:

1. Escribe un captador

<?php class C { static $staticvar = "STATIC"; function getTheStaticVar() { return self::$staticvar; } } $instance = new C(); echo $instance->getTheStaticVar();

Simple y elegante, pero tendría que escribir un captador para cada variable estática a la que está accediendo.

2. Escribe un captador de estática universal.

<?php class C { static $staticvar = "STATIC"; function getStatic($staticname) { return self::$$staticname; } } $instance = new C(); echo $instance->getStatic(''staticvar'');

Esto te permitirá acceder a cualquier estática, aunque aún es un poco largo.

3. Escribe un método mágico

class C { static $staticvar = "STATIC"; function __get($staticname) { return self::$$staticname; } } $instance = new C(); echo $instance->staticvar;

Éste le permite acceder a cualquier variable estática como si fuera una variable local del objeto, pero puede considerarse una abominación impía.


class testClass { public static $property = "property value"; public static $property2 = "property value 2"; } echo testClass::$property; echo testClass::property2;


classname::property;

Creo que eso es todo.