Re: Obtener array de un método.
[email protected] (Carlos Medina)
| Newsgroups | php.general.es |
|---|---|
| Organization | SimplyNetworks |
| Message-ID | <[email protected]> |
Am 20.05.2011 11:10, schrieb Pablo Braulio:
> Hola a todos.
>
> A ver si alguno me puede ayudar con esto.
>
> He creado una un método en una clase para que ejecute la apertura de
> un fichero (fopen).
>
> Intento sacar el contenido de esa apertura desde otro método y no me funciona.
>
> Os pongo el código.
> class ficheros {
> protected $files= array('prueba', 'otro');
> protected $dir= '../traduc';
>
> public function abrirPo(){
> foreach ($this->files as $file) {
> $parthFPo= $this->dir.'/'.$file.'.po';
>
> return fopen($parthFPo, 'r');
> }
> }
> }
>
> Con esto si ejecuto
>
> $fich= new ficheros();
> $fich->abrirPo();
>
> print_r($fich);
>
> El resultado es:
>
> ficheros Object
> (
> [files:protected] => Array
> (
> [0] => prueba
> [1] => otro
> )
>
> [dir:protected] => ../traduc
> )
>
> Creo otro método en la misma clase para ejecutar fgets:
>
> public function leerPo(){
>
> foreach($this->abrirPo() as $po){
> $numLinea= 0;
>
> while (!feof($open)){
> if($contenido= fgets($open)){
> echo $numLinea.'--'.$contenido."\n";
> }
> }
> }
> }
>
> Y el resultado es :PHP Warning: fgets() expects parameter 1 to be resource
>
> Me da la sensación de que no se está sacando obteniendo nada del método abrirPo.
>
> ¿Alguien sabe decirme como hacerlo?.
Hola,
fopen te devuelve un resource (pointer sobre el file) que es el que usa
fputs o fget para poder trabajar. Al llamar asi el fopen estas
devolviendo el recurso al nirvana. Ademas la variable $open no es la
adecuada en el metodo leer po.
$recurso = $fich->abrirPo();
Como estas haciendo un foreach, devuelves muchos recursos al mismo
tiempo por lo que el ultimo recurso es el que vas a poder utilizar, no
obstante los otros files van a quedar abiertos. Ademas de esto no es muy
usual devolver un fopen que formas en un foreach. Te recomiendo que
hagas lo siguiente:
1.- Haz la clase ficheros singleton
2.- Haz el metodo abrirPo con llamada estatica utilizando el array como
variable de metodo en la declaracion del mismo y pones los recursos en
una variable array tambien estatica de tipo privada.
3.- En el metodo leerPo puedes acceder a la variable privada con
self::$variableEstaticadeRecursos para poder leer desde alli
Te lo pongo mas facil:
class Ficheros {
public static $instance = null;
private static $resArray = null;
protected static $dir= '../traduc';
protected static $files= array('prueba', 'otro');
public static get(){
if( self::$instance === null){
self::$instance = new self;
}
}
public static function abrirPo( Array $files ){
foreach ($files as $file) {
if( file_exists($file){
$parthFPo= self::$dir.'/'.$file.'.po';
self::$resArray[] = fopen($parthFPo, 'r');
}
}
}
public static function leerPo(){
try
{
self::abrirPo( self::$files);
}
catch( Exception $e )
{
echo $e->getMessage();
return false;
}
if( count(self::$resArray) > 0 )
{
foreach( self::$resArray as $key => $po){
$numLinea= 0;
while (!feof($po)){
if($contenido= fgets($open)){
echo $numLinea.'- '.$contenido."\n";
}
}
}
}
}
}
se usa:
try
{
Ficheros::leerPo();
}
catch(Exception $e)
{
$e->getMessage();
}
No se si funciona pero a ver como te va. Me dices como lo resolviste. me
interesa
Salu2
Carlos Medina