Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Problema con el manejo de clases en PhP

Estas en el tema de Problema con el manejo de clases en PhP en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Edit: No me habia dado cuenta que habia un subforo especialido para las clases en PHP. Por favor si pudieran moverlo y perdon por las ...
  #1 (permalink)  
Antiguo 01/10/2008, 04:52
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 16 años, 6 meses
Puntos: 11
Problema con el manejo de clases en PhP

Edit: No me habia dado cuenta que habia un subforo especialido para las clases en PHP. Por favor si pudieran moverlo y perdon por las molestias :(.

Edit 2: Con todas las pruebas , en una quite la instancia del objeto, lo he puesto pero me sigue dando el mismo error.
Tambien he modificado el codigo cambiando rectificando algunas cosas que habia cambiado para probar.

Buenas!

Despues de trastear medianamente con PhP durante un tiempo, estoy intentando hacer un "mini" CMS probando cosas con las que aun no me habia metido, entre ellas, las clases.

Estoy haciendo una clase para el tratamiento de imagenes, subida,etc..

Código:
	class img{
	
		var $width=''; // ANCHO DE LA IMAGEN QUE VA A SER TRATADA
		var $height=''; //ALTO DE LA IMAGEN QUE VA A SER TRATADA
		var $img='';  // IMAGEN
		var $imgPath='images/';
		var $imgTemp=''; //IMAGEN COPIA PARA LA SUBIDA AL SERVIDOR
		var $imgType=''; //EXTENSION DE LA IMAGEN
		var $imgSize=''; //TAMAÑO EN BYTES DE LA IMAGEN
		var $error='';
		var $imgNewX=''; //ANCHO DEL THUMB
		var $imgNewY=''; //ALTO DEL THUMB
		var $thumb='';
		var $thumbPath='thumbs/';
		
		
		function setImg($var){
			
			$this->img=$var+$var;
			echo $this->img;	
			
			//$this->img=$_FILES['imagen']['name'];
			//$this->imgTemp=$_FILES['imagen']['tmp_name'];
			//$this->imgType=$_FILES['imagen']['type'];
			//$this->imgSize=$_FILES['imagen']['size'];
		
		}
		
		function imgY(){
		
			$this->height=imagesy($this->img);
		
		}
		
		function imgX(){
		
			$this->width=imagesx($this->img);
		}
	
	
		function imgCheck(){
		
			if(!(strpos($this->imgType,"gif") || strpos($this->imgType,"jpeg") || strpos($this->imgType,"png"))){
			
				echo $this->error="La imagen debe tener como extension : JPEG, GIF, PNG.";
				return false;
				}
			
			if($this->imgSize>200000){
			
				echo $this->error="La imagen no puede exceder el tamaño de 200Kb";
				return false;
			} 
			
		}
		
		
		function imgUpload(){
		
				if(!move_uploaded_file($this->imgTemp,$this->imgPath.$this->img)){
				
					echo $this->error="No se pudo realizar la subida al servidor... Int$eacute;ntelo pasado unos minutos";
					return false;
				}
		
		}
		
		function imgResize($y){
		
			
			
				$this->imgNewX=(imgX() * ($y/imgY()));
				$this->imgNewY=$y;
				$this->thumb=imagecreatetruecolor($this->imgNewX,$this->imgNewY);
				imagecopyresized($this->thumb,$this->img,0,0,0,0,$this->imgNewX,$this->newY);
				
				if(strpos($this->imgType,"gif")){
						imagegif($this->thumb, $this->thumbPath.$this->img);
				
				}else if(strpos($this->imgType,"jpeg")){
				
						imagejpeg($this->thumb, $this->thumbPath.$this->img);
				
				}else 	imagepng($this->thumb, $this->thumbPath.$this->img);
			
		
		}
	
	
	
	}//FIN DE CLASE
En el otro archivo tengo esto que se me olvido ponerlo , ahora estoy haciendo pruebas asi que no es el real:

Código:
include("imageClass.php");

$pepe=new img;

$var=4;

$img->setImg($var);
Me da el siguiente error: Call to a member function setImg() on a non-object (Editado : antes me daba otro por estar en la parra por el edit que puse arriba)

Aun me lio muchisimo con las clases a la hora de definirlas y aprovechar el uso de sus funciones para el resto del codigo. Normalmente habia trabado con webs modulares , y no aprovechaba tanto el codigo como pretendo ahora.

Espero puedan ayudarme porque he mirado sobre las clases , incluso buscado clases similares , pero solo encuentro de tratamiento de imagenes no de subida.

Última edición por shilen79; 01/10/2008 a las 05:46
  #2 (permalink)  
Antiguo 01/10/2008, 06:13
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Problema con el manejo de clases en PhP

pues si debes leer mas... ya que cometes varios errores

uno, si instancias en $pepe porque usas $img ???

otra, se llaman métodos... no funciones... y si necesitas usar un método debes anteponer $this-> o self:: etc.

demás usas métodos en tu clase mal.... por ej. usas imgY() como si devolviera algo.... y no es cierto, o si??

punto. lee y documentate mas, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 01/10/2008, 07:25
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Problema con el manejo de clases en PhP

Hola shilen79,

como bien dice pateketrueke no estas utilizando correctamente la programación orientada a objetos. Tambien como el te recomiendo que releeas la documentación oficial de PHP para este asunto acorde a la versión de PHP que uses, ya que entre php4 y php5 hay diferencias.

Por último recomendarte que antes de embarcarte en clases complicadas, al principio experimentes con clases mas sencillas hasta dominar las normas de uso básicas.

Mas info en...

Clases y objetos php4

Clases y objetos php5

Saludos!!
  #4 (permalink)  
Antiguo 01/10/2008, 08:37
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Problema con el manejo de clases en PhP

Tema trasladado a PHP Orientado a Objetos.
  #5 (permalink)  
Antiguo 02/10/2008, 03:25
 
Fecha de Ingreso: octubre-2007
Mensajes: 118
Antigüedad: 16 años, 6 meses
Puntos: 11
Respuesta: Problema con el manejo de clases en PhP

Buenas! Ante todo muchas gracias por responder.

La verdad es que si necesito leer mas, porque ya consegui resolverlo y he tenido que cambiar muchas cosas y la mayoria por despistes .

No habia implementado clases aun en mis codigos, habia hecho normalmente webs modulares o trabajado con CMS , y la lie de tal forma, que ya habia una cantidad de aberraciones en el codigo que tela .

Cuelgo aqui el codigo resultante. Al final no he podido hacerlo mas general y seguro que para nada esta completamente pulido y optimo pero al menos de momento funciona y poco a poco lo podre ir optimizando:

Código:
class image{
	
		var $width=''; // ANCHO DE LA IMAGEN QUE VA A SER TRATADA
		var $height=''; //ALTO DE LA IMAGEN QUE VA A SER TRATADA
		
		var $img='';  // IMAGEN
		var $imgName='';//NOMBRE DE IMAGEN
		
		var $imgCopy='';
		
		var $imgPath='images/';
		
		var $imgDir=''; //DIRECTORIO DONDE SE ENCUENTRAN LAS IMAGENES
		
		var $imgTemp=''; //IMAGEN COPIA PARA LA SUBIDA AL SERVIDOR
		
		var $imgType=''; //EXTENSION DE LA IMAGEN
		var $imgSize=''; //TAMAÑO EN BYTES DE LA IMAGEN
		
		var $error='';
		
		var $imgNewX=''; //ANCHO DEL THUMB
		var $imgNewY=''; //ALTO DEL THUMB
		
		var $thumb='';
		var $thumbPath='thumbs/';
		
		
		function setImg(){
			
			$this->img=$_FILES['imagen'];
			$this->imgName=$_FILES['imagen']['name'];
			$this->imgTemp=$_FILES['imagen']['tmp_name'];
			$this->imgType=$_FILES['imagen']['type'];
			$this->imgSize=$_FILES['imagen']['size'];
			
		}
		
		
		function imgCheck(){
		
			if(!(strpos($this->imgType,"gif") || strpos($this->imgType,"jpeg") || strpos($this->imgType,"jpg") || strpos($this->imgType,"png"))){
			
				echo $this->error="La imagen debe tener como extension : JPEG, GIF, PNG.";
				return false;
				
				}else if($this->imgSize>200000){
					
					echo $this->error="La imagen no puede exceder el tamaño de 200Kb";
					return false;
				
				}else return true;
			
		}
		
		
		function imgUpload(){
			
				if(!move_uploaded_file($this->imgTemp,$this->imgPath.$this->imgName)){
				
					echo $this->error="No se pudo realizar la subida al servidor... Int$eacute;ntelo pasado unos minutos";
					return false;
				}
		
		}
		
		
		function imgCheckDuplicated(){ 
			
			if(is_dir($this->imgPath)){
			
				$this->imgDir=opendir($this->imgPath);
				while(false!==($imgFile=readdir($this->imgDir))){
				
					if($imgFile==$this->imgName){
						return 2;
					}
				
				}
			@closedir($this->imgPath);
			}
		
		}
		
		function imgLoadToResize($y){ //COMPRUEBA CUAL ES EL ARCHIVO SUBIDO Y GENERA EL THUMB . EL DATO A PASARLE ES LA ALTURA PUES DEBE SER FIJA.
		
			if($this->imgCheckDuplicated()==2){
			
				$this->imgDir=opendir($this->imgPath);
				
				
				if(strpos($this->imgName,"jpg") || strpos($this->imgName,"jpeg")){
				$this->imgCopy=imagecreatefromjpeg("".$this->imgPath.$this->imgName."");
				}else if(strpos($this->imgName,"gif")){
				$this->imgCopy=imagecreatefromgif("".$this->imgPath.$this->imgName."");
				}else $this->imgCopy=imagecreatefrompng("".$this->imgPath.$this->imgName."");
				
				$this->width=imagesx($this->imgCopy);
				$this->height=imagesy($this->imgCopy);
				
				$this->imgNewX=($this->width * ($y/$this->height));
				$this->imgNewY=$y;
				
				
				
				$this->thumb=imagecreatetruecolor($this->imgNewX,$this->imgNewY);
				
				imagecopyresized($this->thumb,$this->imgCopy,0,0,0,0,$this->imgNewX,$this->imgNewY,$this->width,$this->height);
				
				if(strpos($this->imgType,"gif")){
						imagegif($this->thumb, $this->thumbPath.$this->imgName);
				
				}else if(strpos($this->imgName,"jpg") || strpos($this->imgName,"jpeg")){
						imagejpeg($this->thumb,"".$this->thumbPath.$this->imgName."");
				
				}else imagepng($this->thumb, $this->thumbPath.$this->imgName);
				
				closedir($this->imgDir);
			}
		
		}
		
		
	
	
	
		

	
	
	
	}//FIN DE CLASE

El codigo para realizar de momento la subida del archivo y generar el thumb seria algo tal que asi(aun me gustaria poder esclarecerlo mas pero poco a poco jeje).

Código:
include ("imageClass.php");

$img=new image;

$img->setImg();
if($img->imgCheck()){
	if($img->imgCheckDuplicated()!=2){
$img->imgUpload();
}else echo "el nombre de archivo ya esta ocupado";
}

$img->imgLoadToResize(150);

Como veis ha cambiado basicamente todo XDD, al principio tenia algo "similar" pero como no me funcionaba, me lo fui cargando hasta el resultado de arriba por desesperacion XD .

Dejo colgado el codigo , por si a alguien le sirve de "ayuda" ya que siempre me ayudais y quiero poder empezar a aportar yo cosas
  #6 (permalink)  
Antiguo 03/10/2008, 05:29
Avatar de enriqueplace  
Fecha de Ingreso: mayo-2005
Ubicación: Uruguay / Argentina
Mensajes: 1.102
Antigüedad: 18 años, 11 meses
Puntos: 32
Respuesta: Problema con el manejo de clases en PhP

Estimado Shilen79,

Te sugiero actualizarte a PHP5 y empezar a usar el estándar de codificación de Zend.
__________________
Blog phpsenior.com Cursos a Distancia surforce.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:06.