La Red de Conocimientos Pedagógicos - Currículum vitae - ¿Cuáles son los usos de las clases en php? ¿Cuál es la diferencia entre esta y una función personalizada?

¿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.

$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. ?