Re: [PHP-ES] Obtener array de un método.
[email protected] (Lucas Crisman)
| Newsgroups | php.general.es |
|---|---|
| Message-ID | <[email protected]> |
Hola Pablo, parece ser que estas confundiendo un poco algunas cosas:
Primero, en el métofo abrirPo() no creo que lo correcto sea devolver con
return si estas dentro de un foreach, ya que en la primera iteración del
bucle estas saliendo del mismo. Es decir: no entiendo exactamente cual
será tu lógica aquí pero tal vez lo que necesites es asignar el resource
devuelto por fopen en una propiedad de tipo array en la misma clase, de
esta manera vas a tener para cada fichero un resource almacenado hasta
que lo cierres.
Por otro lado, en el método leerPo() tampoco creo correcto utilizar
dentro de un foreach el valor devuelto por abrirPo() ya que esta ultima
devuelve un resource, y foreach necesita un array para trabajar.
Por último, parece ser que a la variable $open nunca le has asignado un
valor alguno, ni resource ni nada parecido, por eso fgets devuelve este
error. Esta variable debería tener alguno de los resources que deberías
almacenar luego de abrir los archivos.
A continuación te paso tu clase modificada a mi parecer:
class ficheros {
protected $files= array('prueba', 'otro');
protected $dir= '../traduc';
protected $fp = array();
public function abrirPo(){
foreach ($this->files as $file) {
$parthFPo= $this->dir.'/'.$file.'.po';
$this->fp[] = fopen($parthFPo, 'r');
}
return;
}
public function leerPo(){
if(empty($this->fp)) {
$this->abrirPo();
}
foreach($this->fp as $open){
$numLinea= 0;
while (!feof($open)){
if($contenido= fgets($open)){
echo $numLinea.'--'.$contenido."\n";
}
}
}
}
}
Espero haber sido de ayuda.
Saludos,
--
Lucas Crisman
On 20/05/2011 06:10, Pablo Braulio wrote:
> 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?.