martes, 27 de junio de 2017

PUBLICACIÓN CLASE 19

En esta clase el profesor nos hizo un repaso de algunos conceptos de la programación
orientado a objetos y nos explico sobre la funcion interfaz en php, realizamos el ejemplo
en notepad como se ejecuta los objetos desde los codigos.
INTERFAZ PHP:

Las interfaz es el recurso ideal para la implementacion del polimorfismo, ya que las interfaz es un conjunto de declaraciones de funciones o métodos sin incluir su codificación, dejando a la clase que implementa la interfaz esta tarea.

A continuación modificaremos el ejemplo visto en el capitulo anterior para adaptarlo a la utilización de interfaces.

<?php
/*
Empezaremos definiendo la interface
*/
interface Poligono
{
  function calculo();
}

/*
A continuacion defino las clases que implementan 
la interface
*/
class classCuadrado implements Poligono
{
  function calculo()
  {
  echo 'area de un cuadrado : a=l*l<br>';
  }
}

class classRectangulo implements Poligono
{
  function calculo()
  {
  echo 'area de un rectangulo : a=b*h<br>';
  }
}

class classTriangulo implements Poligono
{
  function calculo()
  {
  echo 'area de un triangulo : a=(b*h)/2<br>';
  }
}

/* 
definicion de la funcion encargada de realizar las llamada 
polimorfica al metodo "calculo"
A destacar que en la definicion de la funcion definimos el tipo 
parametro que pasamos por referencia, esto no es obligatorio 
en PHP, pero nos ayuda a entender el concepto y asi poder aplicarlo 
en otros lenguajes mas estrictos.
 */
function area(Poligono $obj)
{
  $obj->calculo();
}

/*
Creamos los objetos necesarios
*/
$cuadrado = new classCuadrado;
$rectangulo = new classRectangulo;
$triangulo = new classTriangulo;

/*
Ejecutamos la funcion encargada 
de realizar la llamada polimorfica
*/
area($cuadrado);
area($rectangulo);
area($triangulo);
?>

Al probar el ejemplo comprobamos el comportamiento polimorfico de la función "área", mostrando diferentes resultados en función del contexto en el que se esta ejecutando dicha función.

Por lo tanto hemos logrado establecer una relación polimorfica con objetos de distinta naturaleza gracias a la utilización de interfaces, sin la necesidad de establecer una jerarquía de clases.

Otras características

Voy a concluir comentando otras características propias de las interfaces a tener en cuenta :
Todos los métodos definidos en una interfaz, deben ser codificados en la clase que implementa dicha interfaz.
La clase que implemente la interfaz debe utilizar exactamente las mismas estructuras de métodos que fueron definidos en la interfaz.
Las interfaces se pueden extender al igual que las clases mediante el operador extends.
Una clase puede implementar diferente interfaces.
Una interfaz no se puede instanciar y todos sus métodos son públicos dada la propia naturaleza de la interfaz.
Una interfaz no puede contener ni atributos, ni métodos implementados, solo declaraciones de métodos y constantes.


jueves, 22 de junio de 2017

PUBLICACIÓN CLASE 18

En este dia el profesor jhon esphitia nos explico sobre el método estático y el atributo
estático en php. nos hizo un ejemplo sobre:

class palabra {
  private  $palabra;

public  static $listadopalabras=["sena","adsi"];

public static function getpalabra(){
  $this->palabra;
 return  "Sena";

      }

}
 

main.php

palabra::getpalabra();
palabra::$listadopalabras[0];





MÉTODOS  ESTÁTICOS

Los métodos estáticos a diferencia de los otros se invocan sin crear un objeto, osea desde la misma clase a la que pertenece. De una forma similar a ésta:

NombreDeLaClase::nombreDelMetodo();
 Como verán primero se llama a la clase, luego se utliza los dos puntos (::) y finalmente se invoca al método estático creado. Todo esto sin la necesidad de tener que instanciar un objeto basado en esa clase.

ejemplo:

Resultado de imagen para ejemplo metodo estatico php

Para invocar métodos estáticos dentro de la clase no se usa $this->metodo(), sino que lo hago con self::metodo(). Esto se debe a que $this sirve para hacer llamadas a propiedades y métodos que están dentro del objeto (no estáticos), y yo acá no tengo que crear ningún objeto.

ATRIBUTOS ESTÁTICOS

Las variables pertenecientes a una clase se llaman "propiedades". También se les puede llamar usando otros términos como "atributos" o "campos", pero para los propósitos de esta referencia se va a utilizar "propiedades". Éstas se definen usando una de las palabras reservadas public, protected, o private, seguido de una declaración normal de variable. Esta declaración puede incluir una inicialización, pero esta inicialización debe ser un valor constante, es decir, debe poder ser evaluada durante la compilación y no depender de información generada durante la ejecución.

<?phpclass ClaseSencilla{
   
// Válido a partir de PHP 5.6.0:
   
public $var1 'hola ' 'mundo';
   
// Válido a partir de PHP 5.3.0:
   
public $var2 = <<<EODhola mundoEOD;
   
// Válido a partir de PHP 5.6.0:
   
public $var3 1+2;
   
// Declaraciones de propiedades inválidas:
   
public $var4 self::miMétodoEstático();
   public 
$var5 $myVar;

   
// Declaraciones de propiedades válidas:
   
public $var6 miConstante;
   public 
$var7 = array(truefalse);

   
// Válido a partir de PHP 5.3.0:
   
public $var8 = <<<'EOD'hola mundoEOD;
}
?>


martes, 20 de junio de 2017

CLASE ABSTRACTA EN PHP


La llegada de las interfaces fue uno de los grandes cambios de PHP5. Ya que con ella PHP daba un paso más hacia la programación orientada a objetos completa.
Una clase abstracta es una clase que no se puede instanciar (provocaría error) y por lo tanto no se puede crear un objeto a partir de ella. Su intención es definir una estructura (plantilla), que puede estar parcialmente implementada, para cualquier clase que quiera extenderla. Puede implementear ciertas funcionalidades y dejar que sus herederas terminen de implementearla.

Para crear una clase abstracta debemos usar la palabra clave abstract:

Una clase abstracta debe contener como mínimo un método abstracto. Los métodos abstractos no tienen implementación, sino que definen una funcionalidad que será implementada obligatoriamente en las clases herederas.



abstract class Ejemplo{  
 }  
 
abstract class Animal {   
  function presentacion() {   
   $sonido = $this->sonido();     
   return strtoupper($sonido);   
  }   
  abstract function sonido();     
 }   

viernes, 16 de junio de 2017

PUBLICACIÓN CLASE 17

Polimorfismo

En programación orientada a objetos, el polimorfismo se refiere a la propiedad por la que es posible enviar mensajes sintácticamente iguales a objetos de tipos distintos. El único requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber responder al mensaje que se les envía.

La apariencia del código puede ser muy diferente dependiendo del lenguaje que se utilice, más allá de las obvias diferencias sintácticas.


Por ejemplo, en un lenguaje de programación que cuenta con un sistema de tipos dinámico (en los que las variables pueden contener datos de cualquier tipo u objetos de cualquier clase) como Smalltalk no se requiere que los objetos que se utilizan de modo polimórfico sean parte de una jerarquía de clases.

En lenguajes basados en clases y con un sistema de tipos de datos fuerte (independientemente de si la verificación se realiza en tiempo de compilación o de ejecución), es posible que el único modo de poder utilizar objetos de manera polimórfica sea que compartan una raíz común, es decir, una jerarquía de clases, ya que esto proporciona la compatibilidad de tipos de datos necesaria para que sea posible utilizar una misma variable de referencia (que podrá apuntar a objetos de diversas subclases de dicha jerarquía) para enviar el mismo mensaje (o un grupo de mensajes) al grupo de objetos que se tratan de manera polimórfica.

No obstante, algunos lenguajes de programación (Java, C++) permiten que dos objetos de distintas jerarquías de clases respondan a los mismos mensajes, a través de las denominadas interfaces (esta técnica se conoce como composición de objetos). Dos objetos que implementen la misma interfaz podrán ser tratados de forma idéntica, como un mismo tipo de objeto, el tipo definido por la interfaz. Así, distintos objetos podrán intercambiarse en tiempo de ejecución –siempre que sean del mismo tipo–, y además con dependencias mínimas entre ellos. Por estos motivos se considera un buen principio de diseño en programación orientada a objetos el favorecer la composición de objetos frente a la herencia de clases.1

En Java las interfaces se declaran mediante la palabra clave Interface. Estas se utilizan para lograr la necesaria concordancia de tipos que hace posible el polimorfismo, también como un contrato que debe cumplir cualquier clase que implemente una cierta interfaz, y como una forma de documentación para los desarrolladores. A veces, en la literatura específica sobre Java se habla de "herencia y polimorfismo de interfaces", lo que no concuerda con los conceptos de la programación orientada a objetos porque una clase que implementa una interfaz sólo obtiene su tipo de datos y la obligación de implementar sus métodos, no copia comportamiento ni atributos. Esta terminología puede llevar a confusión, puesto que en Java a menudo se utiliza la mal llamada "herencia de interfaces" para dotar a una clase de uno o varios tipos adicionales, lo que unido a la composición, evite la necesidad de la herencia múltiple y favorezca una utilización más amplia del polimorfismo.

No obstante, el uso de una jerarquía de clases como paso previo, es muy habitual incluso en aquellos lenguajes en los que es posible prescindir de tal jerarquía, ya que, desde una perspectiva conceptual, se puede decir que al pertenecer los "objetos polimórficos" a subclases de una misma jerarquía, se asegura la equivalencia semántica de los mensajes que se invocarán de modo polimórfico. Por esto, en programación orientada a objetos a veces se denomina al polimorfismo como "polimorfismo de subclase (o de subtipo)".

En resumen, en la programación orientada a objetos, la esencia del polimorfismo no atañe a la clase o prototipo de la que provienen los objetos. Aun así, en los lenguajes basados en clases, es habitual (y en algunos tal vez sea el único modo) que dichos objetos pertenezcan a subclases pertenecientes a una misma jerarquía. Entonces, el polimorfismo debe verse como una forma flexible de usar un grupo de objetos (como si fueran sólo uno). Podría decirse que el polimorfismo en esencia refiere al comportamiento de los objetos, no a su pertenencia a una jerarquía de clases (o a sus tipos de datos).

Resultado de imagen para polimorfismo
PUBLICACIÓN CLASE 16

En esta clase el profesor explico en programación orientado objeto el tema de la
herencia en el lenguaje de php, creamos 4 clases  (instructor,aprendiz,main,persona)
la cual usamos con la palabra EXTENTED con el PUBLIC.


ABSTRACCIÓN: 

 La abstracción consiste en aislar un elemento de su contexto o del resto de los elementos que lo acompañan. En programación, el término se refiere al énfasis en el "¿qué hace?" más que en el "¿cómo lo hace?" (característica de caja negra). El común denominador en la evolución de los lenguajes de programación, desde los clásicos o imperativos hasta los orientados a objetos, ha sido el nivel de abstracción del que cada uno de ellos hace uso.

Los lenguajes de programación son las herramientas mediante las cuales los diseñadores de lenguajes pueden implementar los modelos abstractos. La abstracción ofrecida por los lenguajes de programación se puede dividir en dos categorías: abstracción de datos (pertenecientes a los datos) y abstracción de control (perteneciente a las estructuras de control).

Los diferentes paradigmas de programación han aumentado su nivel de abstracción, comenzando desde los lenguajes de máquina, lo más próximo al ordenador y más lejano a la comprensión humana; pasando por los lenguajes de comandos, los imperativos, la orientación a objetos (POO), la Programación Orientada a Aspectos (POA); u otros paradigmas como la programación declarativa, etc.

La abstracción encarada desde el punto de vista de la programación orientada a objetos expresa las características esenciales de un objeto, las cuales distinguen al objeto de los demás. Además de distinguir entre los objetos provee límites conceptuales. Entonces se puede decir que la encapsulación separa las características esenciales de las no esenciales dentro de un objeto. Si un objeto tiene más características de las necesarias los mismos resultarán difíciles de usar, modificar, construir y comprender sobre todo cuando es un método de número entero con terminación fraccionaria.

La misma genera una ilusión de simplicidad dado que minimiza la cantidad de características que definen a un objeto.

Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos problemas. Para conseguir que sus esfuerzos pudiesen ser utilizados por otras personas se creó la POO que consiste en una serie de normas para garantizar la interoperabilidad entre usuarios de manera que el código se pueda reutilizar.

Ejemplo
Pensar en términos de objetos es muy parecido a cómo lo haríamos en la vida real. Una analogía sería modelizar un coche en un esquema de POO. Diríamos que el coche es el elemento principal que tiene una serie de características, como podrían ser el color, el modelo o la marca. Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en marcha, parar o aparcar. En un esquema POO el coche sería el objeto, las propiedades serían las características como el color o el modelo y los métodos serían las funcionalidades asociadas como ponerse en marcha o parar.

Por poner otro ejemplo vamos a ver cómo modelizaríamos en un esquema POO una fracción, es decir, esa estructura matemática que tiene un numerador y un denominador que divide al numerador, por ejemplo 3/2. La fracción será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego podría tener varios métodos como simplificarse, sumarse con otra fracción o número, restarse con otra fracción, etc.

Estos objetos son utilizables en los programas, por ejemplo en un programa de matemáticas se puede hacer uso de objetos fracción y en un programa que gestione un taller de coches, objetos coche. Los programas orientados a objetos utilizan muchos objetos para realizar las acciones que se desean realizar y ellos mismos también son objetos. Es decir, el taller de coches será un objeto que utilizará objetos coche, herramienta, mecánico, recambios, etc.

Resultado de imagen para abstracción php

jueves, 15 de junio de 2017

FUNCTION CONSTRUCT:


 Los constructores padres no son llamados implícitamente si la clase hija define un constructor. Para ejecutar un constructor padre, se requiere invocar a parent::__construct() desde el constructor hijo. Si el hijo no define un constructor, entonces se puede heredar de la clase madre como un método de clase normal (si no fue declarada como privada).


void __construct ([ mixed $args = "" [, $... ]] )

<?phpclass BaseClass {
   function 
__construct() {
       print 
"En el constructor BaseClass\n";
   }
}

class 
SubClass extends BaseClass {
   function 
__construct() {
       
parent::__construct();
       print 
"En el constructor SubClass\n";
   }
}

class 
OtherSubClass extends BaseClass {
    
// heredando el constructor BaseClass}
// En el constructor BaseClass$obj = new BaseClass();
// En el constructor BaseClass
// En el constructor SubClass
$obj = new SubClass();
// En el constructor BaseClass$obj = new OtherSubClass();?>


A diferencia con otros métodos, PHP no generará un mensaje de error a nivel de E_STRICT cuando __construct() es sobrescrito con diferentes parámetros que los métodos padre __construct() tienen.

A partir de PHP 5.3.3, los métodos con el mismo nombre que el último elemento de una clase en un nombre de espacios no serán más tratados como un constructor. Este cambio no afecta a clases sin espacio de nombres.

<?phpclass MyDestructableClass {
   function 
__construct() {
       print 
"En el constructor\n";
       
$this->name "MyDestructableClass";
   }

   function 
__destruct() {
       print 
"Destruyendo " $this->name "\n";
   }
}
$obj = new MyDestructableClass();?>

Como los constructores, los destructores padre no serán llamados implícitamente por el motor. Para ejecutar un destructor padre, se deberá llamar explícitamente a parent::__destruct() en el interior del destructor. También como los constructores, una clase child puede heredar el destructor de los padres si no implementa uno propio.

El destructor será invocado aún si la ejecución del script es detenida usando exit(). Llamar a exit() en un destructor evitará que se ejecuten las rutinas restantes de finalización.



viernes, 2 de junio de 2017

PUBLICACIÓN CLASE 15


Se realizo lo que es el tema de herencia en programacion orientado objetos la cual es  después de la agregación o composición, el mecanismo más utilizado para alcanzar algunos de los objetivos más preciados en el desarrollo de software como lo son la reutilización y la extensibilidad. A través de ella los diseñadores pueden crear nuevas clases partiendo de una clase o de una jerarquía de clases preexistente (ya comprobadas y verificadas) evitando con ello el rediseño, la modificación y verificación de la parte ya implementada. La herencia facilita la creación de objetos a partir de otros ya existentes e implica que una subclase obtiene todo el comportamiento (métodos) y eventualmente los atributos (variables) de su superclase.

HERENCIA


Es la relación entre una clase general y otra clase más específica. Por ejemplo: Si declaramos una clase párrafo derivada de una clase texto, todos los métodos y variables asociadas con la clase texto, son automáticamente heredados por la subclase párrafo.

La herencia es uno de los mecanismos de los lenguajes de programación orientada a objetos basados en clases, por medio del cual una clase se deriva de otra de manera que extiende su funcionalidad. La clase de la que se hereda se suele denominar clase base, clase padre, superclase, clase ancestro (el vocabulario que se utiliza suele depender en gran medida del lenguaje de programación).


Resultado de imagen para herencia informatica






PUBLICACIÓN CLASE 14

En la fecha de 30/05/17 el profesor explico el tema sobre encapsulamiento en el codigo
de php, en esta imagen vemos un ejemplo:

  1. <?php
  2. /*
  3. pequeña modificacion de la clase anterior para ver el comportamiento
  4. del modificador private
  5. */
  6. class classBD{
  7.  
  8. (...)
  9.  
  10.    private $usuario = 'admin';
  11.  
  12.    public function updateUser($var='')
  13.    {
  14.      $this->usuario = $var;
  15.    }
  16.  
  17.    public function verUsuario()
  18.    {
  19.      echo $this->usuario;
  20.    }
  21.  
  22. (...)
  23.  
  24. }
  25.  
  26. $objBD = new classBD();
  27.  
  28. /*
  29. en el ejemplo anterior cambiamos el usuario directamente, en esta ocasion
  30. al haber declarado $usuario como private esta operacion provocara un error.
  31. */
  32. $objBD->usuario = 'nuevoUser';
  33.  
  34. /*
  35. para evitar el error en este caso he creado una funcion publica que se
  36. encargara de modificar el valor a la propiedad desde el interior del objeto
  37. ademas tan bien he includio el metodo verUsuario para comprobar si
  38. realmente se han producido los cambios.
  39. */
  40. $objBD->updateUser( 'nuevoUser');
  41. $objBD->verUsuario();

  42. ?>

viernes, 26 de mayo de 2017

PUBLICACIÓN CLASE 13

En la clase de 26/05/17 el profesor explico sobre el tema de POO, que son los modificadores
de accesos (visibilidad)en la cual se dividen en tres tipos que son:

PUBLIC:

se puede acceder desde donde sea.

PROTECTED:

solo desde la misma clase o mediante clases heredadas.

PRIVATE:

únicamente se puede acceder desde la clase que los definió.


ENCAPSULAMIENTO:

Ocultamiento del estado es decir,de los datos miembro de un objeto de manera que solo
pueda cambiar mediante las operaciones definidas para ese objeto.


lunes, 22 de mayo de 2017

BIOGRAFÍA DE ALAN TURING

(Alan Mathison Turing; Londres, 1912-Wilmslow, Reino Unido, 1954) Matemático británico. Pasó sus primeros trece años en la India, donde su padre trabajaba en la Administración colonial. De regreso al Reino Unido, estudió en el King's College y, tras su graduación, se trasladó a la Universidad estadounidense de Princeton, donde trabajó con el lógico A. Church.

MAQUINA DE ALAN TURING

En 1937 publicó un célebre artículo en el que definió una máquina calculadora de capacidad infinita (máquina de Turing) que operaba basándose en una serie de instrucciones lógicas, sentando así las bases del concepto moderno de algoritmo. Así, Turing describió en términos matemáticos precisos cómo un sistema automático con reglas extremadamente simples podía efectuar toda clase de operaciones matemáticas expresadas en un lenguaje formal determinado. La máquina de Turing era tanto un ejemplo de su teoría de computación como una prueba de que un cierto tipo de máquina computadora podía ser construida

La Segunda Guerra Mundial ofreció un insospechado marco de aplicación práctica de sus teorías, al surgir la necesidad de descifrar los mensajes codificados que la Marina alemana empleaba para enviar instrucciones a los submarinos que hostigaban los convoyes de ayuda material enviados desde Estados Unidos; Turing, al mando de una división de la Inteligencia británica, diseñó tanto los procesos como las máquinas que, capaces de efectuar cálculos combinatorios mucho más rápido que cualquier ser humano, fueron decisivos en la ruptura final del código.


Definió además un método teórico para decidir si una máquina era capaz de pensar como un hombre (test de Turing) y realizó contribuciones a otras ramas de la matemática aplicada, como la aplicación de métodos analíticos y mecánicos al problema biológico de la morfogénesis. En el ámbito personal, su condición de homosexual fue motivo constante de fuertes presiones sociales y familiares, hasta el punto de especularse si su muerte por intoxicación fue accidental o se debió a un intento de suicidio.

jueves, 18 de mayo de 2017

PUBLICACIÓN CLASE 12:

En esta clase el profesor explico sobre el include en php.

Resultado de imagen para ruta relativa absoluta

lunes, 15 de mayo de 2017

PUBLICACIÓN CLASE 11:

En la clase de la fecha 15/05/17 el profesor explico sobre el tema de programación 
orientado a objetos, que son los diagramas de clases y como se definen, se hizo un 
ejemplo de clase en un diagrama.

PUBLIC:

Una variable/función pública puede ser accedida desde fuera de la clase. Es decir, puedo acceder desde la instancia
 de la clase y no sólo desde el código interno de la clase. Ejemplo de funciones públicas son los métodos de una clase.
 También es posible crear variables públicas, para que puedan ser manejadas desde la instancia, pero no es algo común o
recomendable, entre otras cosas porque deja un hueco de seguridad en la clase, acabando con la idea de la “encapsulación”.

 Para declarar una variable/función como pública, se le antepone la palabra clave “public”.


 public function __construct($tit,$ubi)
  {
    $this->titulo=$tit;
    $this->ubicacion=$ubi;
  }

buenas practicas para la definición de clases en POO:

Los objetos son instancias de una clase. Usando el símil “variable – tipo” de la programación estructurada,
 se entiendo que un objeto es una variable que tiene el comportamiento y estados del tipo (objeto)

Veamos la creación de la clase Persona

public class Persona {
      public String nombre;
      public int edad;

      public void correr(){
              /* por implementar */
      }

}
y dentro del cuerpo del programa instanciamos una nueva Persona denominada Esteban:

public class Main {

    public static void main(String[] args) {

        Persona esteban = new Persona();

                // Ahora que esteban es persona, puede correr
                esteban.corre();

    }
}

domingo, 14 de mayo de 2017

BUENAS PRACTICAS DE  ARREGLOS PHP

Arrays comunes, índices numéricos En capítulos anteriores poníamos el ejemplo de un array 
llamado sentido que contenía los distintos sentidos del 
ser humano:

$sentido[1]="ver";
$sentido[2]="tocar";
$sentido[3]="oir";
$sentido[4]="gustar";
$sentido[5]="oler";

En este caso este array cataloga sus elementos, comúnmente llamados valores, por números. Los números del 1 al 5 son por lo tanto las claves y los sentidos ("tocar", "oir"...) 
son los valores asociados.

Arrays asociativos

Si lo deseamos, es posible emplear nombres (cadenas) para clasificar los elementos del array. Lo único que deberemos hacer es entrecomillar las llaves alfanuméricas y entonces 
tendremos un array asociativo:

$moneda["espana"]="Peseta";
$moneda["francia"]="Franco";
$moneda["usa"]="Dolar";
Otra forma de definir idénticamente este mismo array y que 
nos puede ayudar para la creación de arrays más complejos 
es la siguiente sintaxis:

<?
$moneda=array("espana"=> "Peseta","francia" => "Franco","usa" => "Dolar");
?>


Arrays multidimensionales

Una forma muy practica de almacenar datos es mediante la creación de arrays multidimensionales (tablas o matrices con más de una dimensión).

 Pongamos el ejemplo siguiente: 

Queremos almacenar dentro de una misma tabla el nombre, moneda y lengua hablada en cada país. Para hacerlo podemos emplear un array llamado país que vendrá definido por estas tres características (claves). Para crearlo, deberíamos escribir una expresión del mismo
 tipo que la vista anteriormente en la que meteremos una array dentro del otro. Este proceso de incluir una instruccion dentro de otra se llama anidar y es muy corriente en programación:

<?
$pais=array
(
"espana" =>array
   (
   "nombre"=>"España",
   "lengua"=>"Castellano",
   "moneda"=>"Peseta"
   ),
"francia" =>array
   (
   "nombre"=>"Francia",
   "lengua"=>"Francés",
   "moneda"=>"Franco"
   )
);
echo $pais["espana"]["moneda"] //Saca en pantalla: "Peseta"
?>
BUENAS PRACTICAS DE CONSTANTES PHP

Las constantes son elementos de PHP que guardan un valor fijo que no se puede modificar a lo largo del programa. Las constantes pueden ser definidas por el programa o estar predefinidas por el propio PHP o por algún módulo. Los nombres de las constantes siguen las mismas reglas que los nombres de las variables, pero sin el dólar ($) inicial. La costumbre es escribir los nombres de las constantes en mayúsculas.

En principio, se puede no utilizar constantes nunca, puesto que las constantes definidas por el programa podrían reemplazarse por variables. La ventaja de usar constantes y variables es que se puede distinguir a simple vista si a lo largo de un programa algo va a permanecer constante (si es una constante) o puede cambiar (si es una variable). 

El inconveniente de usar constantes es que las constantes no se sustituyen dentro de las cadenas y es necesario sacarlas fuera de las cadenas, haciendo el código un poco más incómodo de escribir y leer. Desde el punto de vista del rendimiento, la diferencia es inapreciable.


<?php
define("PI", 3.14);
define("pi", 3.141592);
print "<p>El valor de pi es " . PI . "</p>";
print "<p>El valor de pi es " . pi . "</p>";
?>
Las constantes deben ser declaradas en mayúsculas, y si son palabras compuestas llevarán linea baja, esto debe ser estándar para constantes generales y las de clase, por ejemplo “NOMBRE_EMPRESA”, “NUMERO_TELEFONICO”



<?php
define('COLOR', '#FFFFFF'); // Constantes generales
define('NOMBRE_COMPLETO', 'Jhon Doe');

class Pruebas
{
    const NUMERO = 10; // Constantes de clase
}
INF

La constante INF representa el infinito, es decir, cualquier 
número demasiado grande (positivo o negativo) para poderse 
guardar en una variable decimal.

PHP_INT_MAX

PHP_INT_MAX es el valor del mayor entero que se puede guardar 
en una variable de tipo entero.

<?php
$maximo = PHP_INT_MAX;
print "<p>El mayor entero que se puede guardar \n";
print "en una variable entera es $maximo</p>\n";
?>

viernes, 12 de mayo de 2017

PUBLICACIÓN CLASE 10:

se hizo un repaso de todos los arreglos multidimensionales de php (while,do while, for, 
foreach, empty, funciones, formularios html, $_GET) 

jueves, 11 de mayo de 2017

PUBLICACIÓN CLASE 9

En esta clase el profesor explico todo lo que tiene un arreglo según sus funciones,
como guardar un arreglo de contacto y mostrar varios datos al navegador.

DIFERENCIA ENTRE  $++i  y  $i++:

Supongamos que tenemos lo siguiente:

i=5; // i vale 5
j=5 // j vale 5
a = i++ // a vale 5, i vale 6
b = ++j // b vale 6, j vale 6

¿Por qué a vale 5 y b vale 6?

a = i++ , esto significa que PRIMERO ASIGNAMOS el valor de i a la variable a (por eso a=5) y LUEGO INCREMENTAMOS el valor de i (i=6)

a=i++;
significa:
a=i;
i++;

b= ++j, esto significa que PRIMERO INCREMENTAMOS el valor de j (j=6) y LUEGO ASIGNAMOS EL VALOR INCREMENTADO de j a la variable b (por eso b=6)

b=++j;
significa;
j++;
b=j;


En resumen:

i++: primero asigno, luego incremento
++i: primero incremento, luego asigno el valor incrementado

Una nota importante es que si no haces asignación, es lo mismo i++ que ++i, por ejemplo.

i=5;
j=5;

i++; // i vale 6
++j; // j vale 6

PHPDOC:


Es una adaptación de Javadoc para el PHP lenguaje de programación . Todavía es un estándar informal para comentar código PHP, pero está en proceso de ser formalizado. Se permite que los generadores de documentos externos comophpDocumentor , que es la implementación estándar de facto,  para generar la documentación de la API y ayuda a algunos entornos de desarrollo tales como Zend Studio , NetBeans , JetBrains PhpStorm , ActiveState Komodo Edit e IDE , PHPEdit y Aptana estudio de interpretar los tipos de variables y otras ambigüedades en el lenguaje de programación relajado escrito y proporcionar una mejor finalización de código , tipo y una sugerencia de depuración.

PHPDoc apoya la documentación de ambos orientado a objetos y procedimental código.

lunes, 8 de mayo de 2017

PUBLICACIÓN CLASE 8

En la fecha de 08/05/17 el profesor nos explico sobre como se hace un arreglo en php
con el comando array y se hizo como ejemplo agregar algunos contactos que se compilaba
en una web.

jueves, 4 de mayo de 2017

HTML https://users.dcc.uchile.cl/~ahevia/docencia/html/comandos.html

HTML, sigla en inglés de HyperText Markup Language (lenguaje de marcas de hipertexto), hace referencia al lenguaje de marcado para la elaboración de páginas web. Es un estándar que sirve de referencia del software que conecta con la elaboración de páginas web en sus diferentes versiones, define una estructura básica y un código (denominado código HTML) para la definición de contenido de una página web, como texto, imágenes, videos, juegos, entre otros. Es un estándar a cargo del World Wide Web Consortium (W3C) o Consorcio WWW, organización dedicada a la estandarización de casi todas las tecnologías ligadas a la web, sobre todo en lo referente a su escritura e interpretación. Se considera el lenguaje web más importante siendo su invención crucial en la aparición, desarrollo y expansión de la World Wide Web (WWW). Es el estándar que se ha impuesto en la visualización de páginas web y es el que todos los navegadores actuales han adoptado.1


El lenguaje HTML basa su filosofía de desarrollo en la diferenciación. Para añadir un elemento externo a la página (imagen, vídeo, script, entre otros.), este no se incrusta directamente en el código de la página, sino que se hace una referencia a la ubicación de dicho elemento mediante texto. De este modo, la página web contiene solamente texto mientras que recae en el navegador web (interpretador del código) la tarea de unir todos los elementos y visualizar la página final. Al ser un estándar, HTML busca ser un lenguaje que permita que cualquier página web escrita en una determinada versión, pueda ser interpretada de la misma forma (estándar) por cualquier navegador web actualizado.
PUBLICACIÓN 7 CLASE:

En la fecha de 04/05/17 se explico sobre el comando de switch
(case,break,default){} en php. hicimos un login de registro del usuario.

BUENAS PRACTICAS DE USO DE VARIABLES PHP

1. Activar el reporte de errores
error_reporting(E_ALL) es tu amigo. Utilízalo, junto con ini_set(‘display_errors’, ‘On’), para ver todas las advertencias del compilador de PHP, saber qué métodos están depreciados, índices inexistentes, etc.
2. No emplear etiquetas cortas
Para que el intérprete de PHP ejecute un código, éste ha de estar delimitado por las etiquetas de apertura y cierre de PHP: <?php ?>. Si en la configuración de PHP de nuestro servidor (archivo php.ini) se permite el uso de etiquetas cortas (<? ?>) el script se ejecutará exactamente igual. Pero, ¿qué ocurre si cambiamos a otro servidor en el que no estén habilitadas? Nuestras páginas dejarán de funcionar como esperamos y, lo que es más grave, puede resultar en que todo nuestro código fuente se imprima por pantalla como texto plano (ya que no habrá sido interpretado), quedando a disposición de cualquier personaje.
3. Operadores de comparación: === vs ==
== (o !=) compara el valor, mientras que === (o !==) compara el valor y el tipo.
Dado que en PHP las variables no tienen un tipo asignado y éste puede cambiar “al vuelo” en tiempo de ejecución, conviene tener en cuenta cómo serán evaluadas las comparaciones en PHP:
<?php
$a = 0;
$b = "0"
$c = false;
var_dump($a == $b); // 0 == 0 -> true
var_dump($a === $b); // 0 == 0 && (integer) == (string) -> false
var_dump($a == $c); // 0 == false -> true

4. echo vs print
Estas funciones realizan la misma tarea. Sin embargo, echo es sensiblemente más rápida que print.
5. Concatenación de cadenas, comillas simples(‘) vs comillas dobles(“)
Cuando trabajes con cadenas, evita siempre el uso de comillas dobles. La razón es que PHP analiza el contenido de las comillas dobles en búsqueda de variables que deban ser interpretadas, resultando en un tiempo de ejecución mayor. Emplea siempre la función echo y concatena las cadenas con comas: echo ‘Hola’, $nombre, ‘, ¿qué te trae por aquí? requerirá menos tiempo al compilador que echo ‘Hola’ . $nombre . ‘, ¿qué te trae por aquí?’. Por lo visto en el punto anterior, el “peor caso posible” sería print "Hola $nombre, ¿qué te trae por aquí?"
6. Búsqueda de cadenas y patrones case insensitive
La búsqueda de una cadena sin importar mayúsculas/minúsculas (stripos()) es entre un 400% y un 600% más lenta que su equivalente case sensitivestrpos()). En cuanto a las expresiones regulares, las búsquedas sensibles, preg_match(“/$patron/”, $cadena), son, como norma, ligeramente más eficaces que su equivalente no sensible: preg_match(“/$patron/i”, $cadena). Si las coincidencias se realizan de modo iterativo (dentro de un bucle for, while, foreach), es recomendable convertir a lowercase o uppercase antes y realizar las operaciones en su versión case sensitive
7. Convenciones
  • Los nombres de las clases en MixedCase. Ejemplo: ElNombreDeMiClase
  • Los nombres de los métodos en camelCase. Ejempo: nombreDelMetodo()
  • Las constantes siempre en ALL_CAPS. Ejemplo: COLOR_DEFINIDO_PARA_MI
  • Las variables, propiedades y parámetros en camelCase. Ejemplo: $variableEnLaQueAlmacenoAlgo
  • Los métodos y variables que no sean públicos, precedidos por un guión bajo (underscore-prefixed). Ejemplo: $_miPalabraSecreta
Veámoslo en un ejemplo para ilustrar:
<?php  
class MyNewClass{
    const LIMIT_OF_ITERATIONS = 10;
    public $myProperty;
    public $myOtherProperty;
    protected $_myProtectedProperty; // observa guión bajo por no ser public

    // constructor 
    function __construct(){
    }

    public function hacerAlgoConMiClase($parametroRecibido){
        for ($i = 0; $i < self::LIMIT_OF_ITERATIONS; $i++){
            // lo que sea
        }
    }

    public function getMyProtectedProperty(){
        return $this->_myProtectedProperty;
    }
}
8. Emplea un Entorno de Desarrollo Integrado (IDE)
Un IDE es un editor de código que ofrece la posibilidad de depurar, autocompletar e identar el código. Existen multitud de alternativas, gratuitas y de pago. Entre las opciones gratuitas destacan Eclipse y Netbeans; por su parte, Zend Studio y PHP Designer destacan como opciones de pago.
9. Separa y reutiliza tu código
Evita tener archivos con cientos o miles de líneas. Agrupa las funciones que vayas a emplear con frecuencia en archivos e inclúyelos para su posterior reutilización. Ejemplo:
<?php 
class Ipl_Util_Date{
    ...
    public static function timestampToSpanishFormat($date, $dateSeparator, 
  $timeSeparator = ' a las '){
        if ($date == '') return null;
        $temp = explode(' ', $date);
        if (sizeof($temp) != 2) return null;
        $dates = explode('-', $temp[0]);
        return $dates[2] . $dateSeparator . $dates[1] 
  . $dateSeparator . $dates[0] 
  . $timeSeparator . $temp[1];
    }
}
Así, si alguna vez queremos convertir una fecha en formato timestamp a un formato con el que estamos más familiarizados, sólo tenemos que hacer <?php echo Ipl_Util_Date::timestampToSpanishFormat($myDate, ‘/’) ?>.
10. Al iterar arrays, fija el valor máximo fuera del bucle
Cada llamada al método count() aumenta hasta en un 50% el tiempo de ejecución, según el tamaño del array.
// mal
for ($i = 0, $i < count($miArray); $i++){
   ... 
}
// bien
$limite = count($miArray);
for ($i = 0; $i < $limite; $i++){
    ...
}
11. Emplea el buffer de salida
En lugar de utilizar echo ‘texto que sea‘, utiliza ob_start() para empezar a almacenar el texto en el búffer de salida. Para terminar la captura, puedes emplear ob_get_contents() y ob_get_clean(), o ob_end_clean().
12. Mantén las opciones de configuración en un archivo
A medida que tu aplicación vaya creciendo necesitarás acceder en distintos lugares a determinados valores. Almacenándolos todos en un único lugar, evitarás tener que modificar todos los archivos cada vez que haya un cambio. Imagina que programas un carrito de la compra y en un determinado momento hay que cambiar el IVA.
13. Incluyendo código
include, require y sus derivados (include_once, require_once) son sentencias, no métodos. No debe ponerse la ruta al fichero entre paréntesis.
Emplea siempre include o require en vez de include_once o require_once para que el cacheado de código sea más efectivo.
14. Codificación de caracteres
Emplea UTF-8 (sin BOM) en lugar de ANSI. Lo que en ANSI u otra codificación
puede ser un determinado caracter (una eñe, por ejemplo), en otra codificación puede ser algo completamente distinto. Si tu público emplea tu misma codificación no hay problema pero, si en un momento dado alguien de, por ejemplo, Rusia entra en tu página, verá la pantalla llena de caracteres sin sentido.
Si tu web va a estar disponible en más de un idioma, es indispensable que tu codificación sea UTF-8 (incluyendo la codificación y colación de la base de datos).
15. Minimiza el número de variables globales
Operar con variables globales es en torno a un 200% más costoso que hacerlo con locales.
16. Directiva AllowOverride
Si tu servidor web es Apache, emplea la directiva AllowOverride None donde sea posible.
Imagina una estructura de directorios como la siguiente: media/images/2013/03/my_image.jpg. Si AllowOverride está en All, antes de que Apache pueda servir el recurso my_image.jpg, debe recorrer todos los directorios desde la raíz hasta “/03” en búsqueda los archivos .htaccess por si en alguno de ellos se especificase alguna directiva sobre el objeto de la petición.
17. No implementes todas las estructuras de datos como objetos
Los array son más rápidos y consumen menos memoria que instanciar un objeto.
18. Incrementar o Decrementar variables: ++$i vs $i++
Pre-incrementar (++$i) es en torno a un 10% más rápido que post-incrementar ($i++). La razón es que cuando hacemos post-incremento, PHP necesita crear una variable temporal en la que almacenar el valor a ser incrementado.
19. Minimiza el número de consultas a la base de datos
Realizar una consulta es costosa en términos temporales. En todas aquellas ocasiones en que los datos no vayan a cambiar con mucha frecuencia, es interesante realizar una única vez la consulta y almacenar el resultado de ésta en un archivo de texto plano. Cuando se produzcan cambios en la consulta, se vuelve a generar el archivo a ser incluido.Por ejemplo: imagina que tienes una web de películas, y en algún sitio de la página se ve el listado de películas meor valoradas.