© DCM-DCIC-UNS 1 © DCM-DCIC-UNS 1 © DCM-DCIC-UNS 1 Tecnologías de Programación Web Dr. Diego C. Martínez Depto de Cs e Ing. de la Computación Universidad Nacional del Sur PHP PHP PHP es muy flexible en la utilización de las variables, cuyo contenido puede ser interpretado como dato o parte de código. Debido a su tratamiento es que todas deben empezar con $. <?php function foo() { echo "En foo()<br />"; } function bar($arg = '') { echo "En bar(); argumento es '$arg'.<br />"; } function echoit($string) { echo $string; } $func = 'foo'; $func(); // Esto invoca a foo() $func = 'bar'; $func('test'); // Esto invoca a $func = 'echoit'; $func('test'); // Esto invoca a ?> Karl|-|7G|-|2 $arch = "accidentes.dat"; $archivo = file($arch); $cant = count($archivo); echo “<table border=0>”; Lenny|-|7F|-|4 Smithers|-|1A|-|0 Homero|-|7G|-|723 accidentes.dat $indice=0; while ($indice < $cant) { $reg = explode("|-|",$archivo[$indice]); /* [0]nombre - [1]sector - [2]accidentes */ echo “<tr>”; echo “<td> $reg[0] </td><td> $reg[1] </td><td> $reg[2] </td>; echo “</tr>”; $indice++; } echo “</table>”; bar() También es fácil escribir en un archivo... echoit() $fh=fopen("unarchivo.dat","a"); fwrite($fh,"esto se escribe"); fclose($fh); PHP posee varias operaciones para manipular strings y arreglos. Muchas paginas interesantes pueden hacerse con estos dos elementos solamente... © Diego C. Martínez - DCIC-UNS 13 PHP 14 © Diego C. Martínez - DCIC-UNS PHP - clases Las clases se definen de manera similar a Java o C#. PHP provee soporte para accesos a bases de datos... <?php $db = @mysql_connect($dbhost, $dbuser, $dbpass); $query="SELECT * FROM empleados ORDER BY legajo"; $result=mysql_query($query); if($result) { $cant = mysql_num_rows($result); for($j=0;$j<$cant;$j++){ $nombre=mysql_result($result,$j,'nombre'); $legajo=mysql_result($result,$j,'legajo'); } } class A { public $var = ‘un valor'; Existen muchas librerias gratuitas que pueden facilitar el acceso a una base de datos, encapsulandola en un objeto con una interfaz específica. El modelo de objetos de PHP es simple e implementa las nociones elementales de la orientaciòn a objetos... function funcion1() //codigo } { function funcion2() //codigo } { } ?> Los objetos se crean con la palabra reservada new y el acceso a los miembros de los objetos es por medio del operador -> Para referenciar el objeto actual se utiliza la pseudovariable $this. No se aplican las reglas de ámbito tradicionales (como en Pascal). Debe indicarse explicitamente que datos pueden accederse globalmente: global $dato1; © Diego C. Martínez - DCIC-UNS © DCM-DCIC-UNS 15 © Diego C. Martínez - DCIC-UNS 16 1 Tecnologías de Programación Web Dr. Diego C. Martínez Depto de Cs e Ing. de la Computación Universidad Nacional del Sur PHP PHP – objetos y asignaciones <?php class SimpleClass { // Declaración de atributo public $var = 'Hola Mundo!'; // Declaración de método public function displayVar(){ echo $this->var; } } ?> Al asignar un objeto ya creado a una nueva variable, está ultima estará asociada al objeto original. Así funciona también en el pasaje de parámetros. Esto es semántica por referencia. <?php include(“simpleclass.php”); $a = new SimpleClass(); $a->displayVar(); $a->var = “Chau Mundo”; $a->displayVar(); Esto ha causado algo de confusión. En PHP4 una asignación del tipo $objeto1 = $objeto2 Causa una clonación de objetos, puesto que la semántica de manipulación que prevalece es la de por valor. Para obtener el efecto “referencia” debe hacerse $objeto1 =& $objeto2 ?> holachau.php En PHP5 la asignación “=“ tiene un efecto igual a la asignación de Java. La asignación “=&” se interpreta como la definición de un alias para el mismo objeto (NO es una referencia!) simpleclass.php En PHP4, solo las constantes se inicializaban en la declaración © Diego C. Martínez - DCIC-UNS 17 PHP – objetos y asignaciones PHP - herencia La herencia se denota con la palabra reservada extends. PHP no admite herencia múltiple. Parte de la confusión inicial… Los métodos y miembros heredados pueden redefinirse, a menos que el ancestro incluya la palabra reservada final. Una clase también puede ser final. Es posible acceder a métodos de la clase padre por medio del prefijo parent:: <?php $instance = new SimpleClass() $assigned = $instance; $reference =& $instance; $instance->var = '$assigned will have this value'; $instance = null; // $instance and $reference become null var_dump($instance); var_dump($reference); var_dump($assigned); ?> Output en el browser 18 © Diego C. Martínez - DCIC-UNS <?php class SimpleClass { // Declaración de atributo public $var = ‘Hola Mundo!'; // Declaración de método public function displayVar() { echo $this->var; } } ?> NULL NULL object(SimpleClass)#1 (1) { ["var"]=>string(30) "$assigned will have this value" } <?php class ExtendClass extends SimpleClass { function displayVar(){ //redefinición echo “Heredando…\n"; parent::displayVar(); } } $extended = new ExtendClass(); $extended->displayVar(); ?> PHP también permite clases abstractas e interfaces. © Diego C. Martínez - DCIC-UNS © DCM-DCIC-UNS 19 © Diego C. Martínez - DCIC-UNS 20 1 Tecnologías de Programación Web Dr. Diego C. Martínez Depto de Cs e Ing. de la Computación Universidad Nacional del Sur PHP - constructores PHP - atributos Los constructores deben tener el siguiente encabezado: Los atributos pueden ser públicos, privados o protegidos. void __construct ( [mixed args [, ...]] ) Los atributos privados no se heredan, por lo que un intento de acceso a ellos queda indefinido. <?php class BaseClass { function __construct() { print "In BaseClass constructor\n"; } } Los métodos pueden tener los mismos modificadores de visibilidad, con el mismo significado. class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor\n"; } } function echo echo echo } printHello() { $this->public; $this->protected; $this->private; } $obj = new MyClass(); echo $obj->public; // Funciona OK! echo $obj->protected; // Error fatal echo $obj->private; // Error fatal $obj->printHello(); // Muestra todos $obj = new BaseClass(); $obj = new SubClass(); ?> © Diego C. Martínez - DCIC-UNS <?php class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; ?> 21 PHP – accesos estáticos © Diego C. Martínez - DCIC-UNS 22 PHP – comparaciones El operador :: (Paamayim Nekudotayim) se utiliza para acceder entidades estáticas, constantes y métodos redefinidos estáticos (static). La comparación de objetos es algo mas complicada que en PHP4. Existen dos operadores: <?php class MyClass { const CONST_VALUE = 'A constant value'; } == Los objetos son iguales si poseen los mismos atributos y son instancias de la misma clase. echo MyClass::CONST_VALUE; ?> === Las variables de objeto son idénticas si y sólo si refieren a la misma instancia de la misma clase. Las palabras self y parent, se usan para poder acceder a miembros o métodos desde dentro de una definición de clase <?php class OtherClass extends MyClass { public static $my_static = 'static var'; public static function doubleColon() { echo parent::CONST_VALUE . "\n"; echo self::$my_static . "\n"; } } © Diego C. Martínez - DCIC-UNS © DCM-DCIC-UNS 23 © Diego C. Martínez - DCIC-UNS 24 1