¿Cuáles son los usos de las clases en php? ¿Cuál es la diferencia entre esta y una función personalizada?
Lea el Capítulo 18 del manual de PHP. Comprenderá el contenido después de leerlo.
Capítulo 18: Clases y Objetos (PHP 4)
Índice
Clases
Herencia
Constructor
Operador de resolución de rango (::)
padre
¿Objeto serializado?-?Objeto en sesión
Funciones mágicas ?__dormir? y ?__wakeup
Referencias en constructores
Comparación de objetos
Clases
Una clase es una variable con Una colección de funciones que operan sobre estas variables. Utilice la siguiente sintaxis para definir una clase:?
lt;?php
class?Cart?{
var?$items;?//?Shopping Artículos del carrito en
//?Add?$num?$artnr?items al carrito de compras
function?add_item($artnr,?$num)?{
$this-gt; items[$artnr]? =?$num;
}
//?Remove?$num?items[$artnr?from Quitar de carrito de compras
función?remove_item($artnr,?$num)?{
if?($this-gt;items[$artnr]?gt;?$num )? {
$this-gt;items[$artnr]?-=?$num;
return?true;
}?elseif?( $this -gt; artículos[$artnr]?==?$num)?{
unset($this-gt; artículos[$artnr]);
return?true ;
}?else?{
return?false;
}
}
} gt; /p>
El ejemplo anterior define una clase ?Cart?, que consta de una serie de artículos en el carrito de compras y dos funciones para agregar y eliminar artículos del carrito de compras. ?
Advertencia
No puede dividir una definición de clase en varios archivos. Tampoco puede dividir una definición de clase en múltiples bloques PHP a menos que la división esté dentro de una declaración de método. El siguiente uso no funcionará:?
lt;?php
class?test?{ gt;
lt;?php
function?test()?{
print?'OK';
}
} gt;?
Pero lo siguiente uso Es posible:?
lt;?php
clase?test?{
función?test()?{ gt;
lt;?php
print?'OK';
}
} gt;?
La siguiente advertencia es para ?PHP?4. ?
Precaución
El nombre ?stdClass? ya está utilizado y reservado por ?Zend? Una clase llamada ?stdClass? no se puede definir en código ?PHP? ?
Precaución
Los nombres de funciones __sleep? y __wakeup? son funciones mágicas en la clase ?PHP?. No puedes nombrar una función después de esto en ninguna clase a menos que quieras alguna funcionalidad mágica asociada con ella.
?
Precaución
PHP reserva todos los nombres de funciones que comienzan con ?__? A menos que desee utilizar alguna función mágica que se encuentra en la documentación, se recomienda no iniciar el nombre de la función con ?__? ?
En ?PHP?4?, el valor de una variable var? sólo se puede inicializar a una constante. Inicializar una variable con un valor no constante requiere una función de inicialización, que se llama automáticamente cuando se crea el objeto. Esta función se llama constructor (ver más abajo). ?
lt;?php
/*?Esto no se puede usar en PHP?4?*/
class?Cart?{
var?$todays_date?=?date("A-m-d");
var?$nombre?=?$primer nombre;
var?$propietario?=?'Fred? '?.?'Jones';
/*?Sin embargo, las matrices que contienen constantes pueden?*/
var?$items?=?array("VCR",?" TV ");
}
/*?¿Se debe hacer así?*/
clase?Carrito?{
var ?$ fecha_de hoy;
var?$nombre;
var?$propietario;
var?$items?=?array("VCR",?" TV" );
función?Cart()?{
$this-gt; todays_date?=?date("Y-m-d");
$this -gt ;nombre?=?$GLOBALS['nombre'];
/*?etc.?.?.?*/
}
} gt; ?
Las clases también son tipos, es decir, son modelos de variables reales. Debe utilizar el operador ?nuevo? para crear variables del tipo correspondiente. ?
lt;?php
$carro?=?new?Carro;
$carro-gt;add_item("10",?1);
$another_cart?=?new?Cart;
$another_cart-gt;add_item("0815",?3); gt;?
Lo anterior código Se crean dos objetos de la clase Cart, $cart y $another_cart. Cuando se llama al método add_item() del objeto $cart, se agrega 1 artículo del artículo No. 10. Para el objeto ?$another_cart, se agregaron 3 artículos del artículo ?0815? ?
$cart? y ?$another_cart? ambos tienen métodos ?add_item(), remove_item()? Todas son funciones y variables obvias. Piense en ellos como algo así como directorios en un sistema de archivos. Es posible tener dos archivos README.TXT diferentes en el sistema de archivos, siempre que no estén en el mismo directorio. Así como cada archivo al que se accede desde el directorio raíz requiere ingresar el nombre de ruta completo del archivo, se debe especificar el nombre completo de la función que debe llamarse: En términos de PHP, el directorio raíz será el espacio de nombres global y la notación del nombre de ruta. será ?-gt;. Por lo tanto, los nombres $cart-gt;items y $another_cart-gt;items nombran dos variables diferentes.
Tenga en cuenta que el nombre de la variable es ?$cart-gt;items, no ?$cart-gt;$items. Eso se debe a que en ?PHP? un nombre de variable solo tiene un signo de dólar. ?
lt;?php
//?Correcto, ¿solo hay uno?$
$cart-gt;items?=?array("10 "? =gt;?1);
//?Incorrecto, porque?$cart-gt;$items?se convierte en?$cart-gt;""
$cart - gt;$items?=?array("10"?=gt;?1);
//?Correcto, pero puede que no sea el resultado deseado:
// ? $cart-gt;$myvar? se convirtió en ?$cart-gt;items
$myvar?=?'items';
$cart-gt;$myvar? ("10"?=gt;?1); gt;?
Al definir una clase, es imposible saber a qué nombre del objeto se accederá: al escribir la clase Cart, no saber eso el nombre del objeto se llamará $cart u $another_cart más adelante. Por lo tanto, no puede utilizar ?$cart-gt;items en una clase. Sin embargo, para acceder a sus propias funciones y variables dentro de la definición de clase, se puede utilizar la pseudovariable ?$this? La variable $this? puede entenderse como "mía" o "el objeto actual". Por lo tanto, ?'$this-gt;items[$artnr]? =?$num'? puede entenderse como "el contador ?$artnr? de mi propia matriz de elementos más ?$num" o "el contador ?$artnr? de mi propia matriz de elementos más ?$num" o "el? $artnr?Counter incremento?$num". ?
Nota: La pseudovariable $this generalmente no está definida si el método en el que se encuentra se llama estáticamente. Pero esta no es una regla estricta: si un método se llama estáticamente desde otro objeto, entonces se definirá ?$this? En este momento, el valor de ?$this? es el objeto que emitió la llamada. Utilice el siguiente ejemplo para demostrar:?
lt;?php
clase?A
{
función?foo()
{
if?(isset($this))?{
echo?'$this?is?definido?(';
echo?get_class($this);
echo?")\n";
}?else?{
echo?"\$this ?no?está?definido.\n";
}
}
}
clase?B
{
función?bar()
{
A::foo();
}
}
$a?=?new?A();
$a-gt;foo();
A::foo() ;
$b?=?new?B();
$b-gt;bar();
B::bar(); ;?
El ejemplo anterior generará:
$this?is?definido?(a)
$esto?is?not?definido. p>
$this?is?definido?(b)
$this?is?not?definido
Nota: Hay algunas funciones interesantes para trabajar con clases y. objetos. Debes prestar atención a las funciones de clase/objeto. ?