You are on page 1of 42

Manejo de

Archivos
Fundamentos
OOP
Archivos en PHP
La idea bsica para trabajar con archivos en forma general es la
siguiente:

Realizar las
Abrir el fichero
operaciones
para lectura / Leer el fichero
necesarias en el
escritura
contenido

Escribir los
Cerrar el fichero
datos
fopen()
La funcin fopen() asigna a una variable un puntero (un descriptor) al fichero que quiera
abrir.
La variable puede utilizarse despus para hacer cualquier tipo de operacin.
Si el fichero que intenta abrir no existe o no puede utilizarse en ese momento, devuelve
false.
fopen ( nombre_fichero , modo_apertura)
En la plataforma Windows, asegrese de escapar cualquier barra invertida usada en la
ruta de fichero, o use barras hacia delante.
Modo Explicacin
Slo lectura ("r") Slo permite leer el fichero. Si intenta hacer
otra cosa le saldr un error.

Lectura y escritura si Permite leer y escribir un fichero que exista.


existe el fichero("r+") El contenido del fichero no se borra, sino que
se escribe a continuacin.

Slo escritura ("w") Slo se puede escribir. Sobrescribe


cualquier fichero afectado.
Escritura y lectura ("w+") Si el fichero no existe intenta crearlo.
Escritura al final ("a") Escribe siempre al final del fichero tanto si
existe como si no.

Lectura y escritura al Escribe al final del fichero y permite leer


final ("a+")
Modo Explicacin
Escritura al principio Si el fichero ya existe, la llamada a fopen()
si no existe el fichero fallar devolviendo FALSE y generando un
(x) error de nivel E_WARNING. Si el fichero no
existe se intenta crear.

Lectura y Escritura al Creacin y apertura para lectura y escritura;


principio si no existe de otro modo tiene el mismo comportamiento
el fichero (x+) que 'x'.
Modo Explicacin
Si el fichero no existe se crea. Si existe no
es truncado (a diferencia de 'w'), ni la
Lectura al principio (c)
llamada a esta funcin falla (como en el
caso con 'x').
Abrir el fichero para lectura y escritura; de
Lectura y escritura al
otro modo tiene el mismo comportamiento
principio (c+)
que 'c'.
PHP puede abrir ficheros remotos que estn
almacenados en servidores. As, podr utilizar el
protocolo HTTP o FTP para recuperar datos
remotamente.
fread()
fread() tiene como parmetro un descriptor de fichero, devuelto por la funcin
fopen () y el tamao del bloque de datos que queremos leer.
$variable = fread($descriptor, 4000) ;

Normalmente no se conocer el tamao del fichero.


La funcin filesize() que devuelve el tamao en bytes del fichero que se pasa
como argumento.
$variable = fread($descriptor,filesize("noticias.txt"));

nombre del fichero que estamos tratando


Devuelve un bloque completo de caracteres ledos desde un fichero y puede
hacerse poco manejable cuando se intente buscar algn dato especfico
Ejemplo:

En sistemas en los que se diferencia entre archivos binarios y de texto (Windows) el fichero debe
ser abierto con 'b' incluida en el parmetro modo de fopen().
Funciones para lectura de archivos:
feof( fichero_abierto ) Comprueba si el puntero a un archivo est al final
del archivo. Si el puntero al archivo pasado a la funcin no es vlido, se
podra dar un bucle infinito, ya que feof() falla para devolver TRUE.
fgets( longitud ) Obtiene una lnea desde el puntero a un fichero, La
lectura termina cuando se han ledo length - 1 bytes, o una nueva lnea (la
cual est incluida en el valor de retorno), o un EOF (lo que suceda
primero). Si no se especifica una longitud, se seguir leyendo desde el
flujo hasta que alcance el final de la lnea.
fwrite(fichero_abierto, string, legth)
Escribe en un fichero, apuntado por un descriptor, una cadena de caracteres. Es
imprescindible que el fichero est abierto en uno de los modos de escritura para que no
d error.

string La cadena que va a ser escrita.

length Si se da el argumento length, la escritura se detendr despus de que length


bytes hayan sido escritos o se alcance el final de string, lo que suceda primero.
Ejemplo:
Funciones de comprobacin
Antes de borrar, copiar o renombrar un fichero, hacer una comprobacin mnima
para saber si el fichero existe.
file_exists(ruta_fichero_directorio) Comprueba si existe un fichero o directorio
filetype(ruta_fichero) Obtiene el tipo de fichero. Devuelve el tipo del fichero.
Los valores posibles son fifo, char, dir, block, link, file, socket y unknown.

Adems existen un conjunto de funciones que preguntan directamente al archivo


por su tipo y el resultado es true o false. Las funciones is_dir(), is_executable() ,
is_ file() y is_link() , preguntan si es del tipo directorio, ejecutable, fichero o
enlace respectivamente.
Tcnica para almacenar datos de configuracin en un fichero
Utilizar un tipo de fichero de configuracin que utiliza la misma estructura
que el fichero php.ini
La estructura es la siguiente:
Tcnicas para almacenar datos de configuracin en un fichero.
Una tcnica habitual es crear un fichero con variables de PHP que toman los
valores adecuados y, en el transcurso del programa, utilizar una llamada a la
funcin require_once() para poder utilizarlas.
Ejemplo como configuracin para conectar a una base de datos:
Este archivo almacena las variables que necesite en el transcurso del programa.
Para leerlo existe una sentencia especial que almacena el resultado en un array.
Para acceder a cada uno de los campos hay que utilizar la notacin de un array
de dos dimensiones como muestra el ejemplo.
Orientacin a
objetos en PHP
Una clase es un tipo de dato que contiene una misma <?php
estructura, variables y funciones. class pagina_Web
Una clase es una especie de plantilla desde la que los {
objetos son instanciados y toma su valor. public $titulo;
Desde una clase se pueden construir varios objetos del function getTitulo(){
mismo tipo return $this->titulo;
}
Una vez que han declarado una clase, es necesario se }
instancie, para esto es usado el constructor new ?>
$miClaseInstanciada = new miClase();
Constructores: los constructores son declarados con la directiva __construct.
Destructores: Se pueden declarar con la directiva __destruct. No son obligatorios de
implementar.

<?php
class MyDestructableClass { Doble
function __construct() { guion bajo
print "En el constructor\n";
$this->name = "MyDestructableClass";
}

function __destruct() {
print "Destruyendo " . $this->name . "\n";
}
}

$obj = new MyDestructableClass();


?>
Los mtodos se declaran como funciones tradicionales en PHP:
class miClase {
function nombreFuncion() {
echo "Nueva Funcin";
}
}

Llamado de la funcin: Fuera del alcance de una clase, sus


mtodos son llamados indirectamente utilizando el operador ->

$objClase = new miClase();


$objClase->miFuncion();
Visibilidad
En PHP5 se incluye la nocin de visibilidad en los mtodos y propiedades. Los que le permite
determinar el alcance de lo que cada uno de los componentes de interfaces de su clase se puede
acceder.
Nombre Descripcin

public Los recursos se puede acceder desde cualquier


mbito.
protected Los recursos slo se puede acceder desde dentro
de la clase si se define y sus descendientes.
private Los recursos slo se puede acceder desde dentro
de la clase donde se define.
final El recurso es accesible desde cualquier mbito,
pero no se puede sobre escribir en las clases
descendientes.
Propiedades o mtodos estticos:
PHP 5 tambin implementa mtodos estticos a diferencia de los mtodos y propiedades,
sus homlogos estticos existen y son accesibles como parte de una clase en s.
Clase constantes trabajan de la misma manera que las constantes ordinarias. Clase
constantes son pblicas y accesibles desde todos los mbitos.

const BAR = "Hello World";


static public function fncEstatica() {
echo "Hello World!!!";
}
Declarar propiedades o mtodos de clases como estticos los hacen accesibles sin
necesidad de una instanciacin de la clase. Una propiedad declarada como static no puede
ser accedida con un objeto de clase instanciado (pero s se puede con mtodos estticos).
<?php
class Nombre{
protected $nombre;
Ejemplo: static $apellido="Hernndez";
public function getNombre(){
return $this->nombre;
}
public function setNombre($nombre){
$this->nombre=$nombre;
}
public static function NombreDefecto(){
return "Luis Daniel ";
}
public static function getApellido(){
return static ::$apellido;
}
}
$luis=new Nombre();
echo $luis->NombreDefecto();
echo $luis->getApellido();
echo "<br><br>";
//Tambin se puede acceder al nombre por defecto
echo Nombre::NombreDefecto();
echo Nombre::getApellido();
?>
La programacin orientada a objetos permite heredar de otras
clases. Con esta tcnica puede ahorrar mucho tiempo de trabajo.
La clase hija (clase que hereda de otra) adquiere estas
propiedades:
Automticamente obtiene todas las variables miembro de la clase
padre.
Tambin obtiene todas las funciones miembro de la clase padre,
que funcionarn exactamente de la misma forma.
La clase hija puede a su vez definir nuevas variables y funciones.
La palabra reservada extends indica que la nueva clase creada
ser una extensin (heredar) de la clase.
<?php
class a {
// Propiedades y mtodos de a
};
class b extends a {
// Nuevas propiedades y mtodos
}
?>
Las clases abstractas permiten definir funciones que deben
implementarse obligatoriamente en los objetos que hereden y,
adems, permiten definir funciones completas que pueden heredarse.
Las clases abstractas deben llevar la palabra reservada abstract en
la declaracin de la clase y en todos los mtodos que slo definan su
nombre.
Los mtodos definidos como abstractos simplemente declaran la
estructura del mtodo, pero no pueden definir la implementacin.
<?php class ClaseConcreta1 extends ClaseAbstracta
abstract class ClaseAbstracta {
protected function getValor() {
{
return "ClaseConcreta1";
// Forzar la extensin de clase para definir este mtodo }
abstract protected function getValor();
abstract protected function valorPrefijo($prefijo); public function valorPrefijo($prefijo) {
return "{$prefijo}ClaseConcreta1";
// Mtodo comn }
public function imprimir() { }
print $this->getValor() . "\n";
class ClaseConcreta2 extends ClaseAbstracta
} {
} public function getValor() {
return "ClaseConcreta2";
}

public function valorPrefijo($prefijo) {


return "{$prefijo}ClaseConcreta2";
}
}

$clase1 = new ClaseConcreta1;


$clase1->imprimir();
echo $clase1->valorPrefijo('FOO_') ."\n";

$clase2 = new ClaseConcreta2;


$clase2->imprimir();
echo $clase2->valorPrefijo('FOO_') ."\n";
?>
Las interfaces permiten crear un "contrato" que sus clases deben aplicar.
Las interfaces de objetos permiten crear cdigo con el cual especificamos qu mtodos
deben ser implementados por una clase, sin tener que definir cmo estos mtodos se
debe desarrollar.
Las interfaces son definidas utilizando la palabra clave interface, de la misma forma
que con clases estndar, pero sin mtodos que tengan su contenido definido.
Todos los mtodos declarados en una interfaz deben ser public, ya que sta es la
naturaleza de una interfaz.
Implements: Se utiliza para implementar una interfaz. Todos los mtodos en una
interfaz deben ser implementados dentro de la clase; el no cumplir con esta regla
resultar en un error fatal. Las clases pueden implementar ms de una interfaz si se
deseara, separndolas cada una por una coma.
<?php
interface a
{
public function foo();
}

interface b extends a
Notas: {
Una clase no puede implementar dos interfaces que public function baz(Baz $baz);
compartan nombres de funciones, puesto que esto }
causara ambigedad.
// sto s funcionar
class c implements b
Las interfaces se pueden extender al igual que las {
clases utilizando el operador extends. public function foo()
{
La clase que implemente una interfaz debe utilizar }
exactamente las mismas estructuras de mtodos que
fueron definidos en la interfaz. De no cumplir con esta public function baz(Baz $baz)
{
regla, se generar un error fatal.
}
}
?>
TOPICOS
AVANZADOS DE
POO EN PHP
El operador :: se utiliza para hacer referencia a funciones y
variables en las clases base o hacer referencia a funciones que se
encuentran en clases que an no tienen ninguna instancia.
Existen funciones de clase, pero no existen variables de clase.
De hecho, no existe objeto alguno en el momento de la invocacin.
Siendo as, una funcin de clase no puede utilizar ninguna variable
de objeto (pero puede utilizar variables locales y globales), y no
puede utilizar $this para nada.
<?php
class A {
function example() {
echo "I am the original function A::example().<br />\n";
}
}

class B extends A {
function example() {
echo "I am the redefined function B::example().<br />\n";
A::example();
}
}

// no hay objetos de la clase A.


// esto imprimir
// I am the original function A::example().<br />
A::example();

// crear un objeto de clase B.


$b = new B;

// esto imprimir
// I am the redefined function B::example().<br />
// I am the original function A::example().<br />
$b->example();
?>
En vez de utilizar el nombre de la clase base en el
cdigo, debe utilizarse el nombre especial parent, que
hace referencia al nombre de la clase base tal como se
especifica en la declaracin extends de la clase. Al
hacer esto, se evita utilizar el nombre de la clase base
en ms de una ubicacin. Si la herencia se cambiara
durante la implementacin, el cambio puede llevarse a
cabo con facilidad simplemente cambiando la
declaracin extends de la clase.
Ejemplo: <?php
class A {
function example() {
echo "I am A::example() and provide basic functionality.<br />\n";
}
}

class B extends A {
function example() {
echo "I am B::example() and provide additional functionality.<br />\n";
parent::example();
}
}

$b = new B;

// Este ejemplo invocar a B::example(), que a su vez invocar a A::example().


$b->example();
?>
En PHP exiten los siguiente mtodos mgicos:
__construct(), __destruct(), __call(), __callStatic(), __get(),
__set(), __isset(), __unset(), __sleep(), __wakeup(),
__toString(), __invoke(), __set_state() y __clone()
PHP se reserva todos los nombres de los mtodos que
comienzan con __ como mgicos.
//METODOS SET Y GET
public function __set($nombreAtributo,$valor){

if(property_exists($this, $nombreAtributo)){
$this->$nombreAtributo=$valor;
}
else
{
echo "No existe el atributo $nombreAtributo";
}
} public function __get($nombreAtributo){
if(property_exists($this, $nombreAtributo)){
return $this->$nombreAtributo;
}
else
{
echo "No existe el atributo $nombreAtributo";
}
}
serialize() devuelve un string conteniendo una representacin de
flujo de bytes de cualquier valor que pueda ser almacenado en
PHP.
unserialize() puede utilizar este string para recrear los valores
originales de la variable. Al utilizar serialize para guardar un objeto,
se guardarn todas las variables en el objeto. Las las funciones en
un objeto no sern guardadas, solamente el nombre de la clase.
Para poder utilizar unserialize() un objeto, la clase de ese objeto
necesita estar definida.
<?php
// classa.inc:

class A {
var $one = 1;
Ejemplo: function show_one() {
echo $this->one;
}
}

// page1.php:

include("classa.inc");

$a = new A;
$s = serialize($a);
// almacenar $s en algn lado donde page2.php pueda encontrarle.
$fp = fopen("store", "w");
fwrite($fp, $s);
fclose($fp);

// page2.php:

// esto es necesario para que unserialize funcione apropiadamente.


include("classa.inc");

$s = implode("", @file("store"));
$a = unserialize($s);

// ahora utilizar la funcin show_one() del objeto $a.


$a->show_one();
?>
serialize() revisa si la clase tiene una funcin con el nombre mgico
__sleep. Si es as, esa funcin es ejecutada antes de cualquier
serializacin. Puede limpiar el objeto y se supone que devuelva una
matriz con los nombres de todas las variables de ese objeto que
debern ser serializadas. Si el mtodo no devuelve nada, entonces
NULL es serializado.
La intencin de utilizar __sleep es asentar datos pendientes o
realizar tareas similares de limpieza. Tambin la funcin es til si se
tienen objetos muy grandes que no necesitan ser guardados
completamente.
De manera correspondiente, unserialize() revisa la presencia
de una funcin con el nombre mgico de __wakeup. Si est
presente, esta funcin puede reconstruir cualesquiera recursos
que el objeto pueda tener.

El propsito de utilizar __wakeup es reestablecer cualquier


conexin a bases de datos que se pudiese haber perdido
durante la serializacin y realizar otras tareas de reinicializacin.
Ejemplo:

You might also like