Класс Image, внутри класса не запоминаются resource картинки

D!!!

Новичок
Класс Image, внутри класса не запоминаются resource картинки

Проблема такова:
Написал я свой класс Image он делает много чего с картинкой, но проблема в том что он не работает с внутренней переменной, которая сохраняет resource картинки
вот пример:
PHP:
class Image
{
	
	var $Pointer;	
	var $Extension;
	var $Filename;
	var $Quality;
	
	var $Width = 0;
	var $Height = 0;
	
	
	function Image()
	{
		$this->Pointer = 0;
		$this->Quality = 100;
		$this->Filename = '';
	}
	
	function SetExtension( $value )
	{
		$this->Extension = strtolower( $value );
	}
	
	function SetFilename( $value )
	{
		$this->Filename = $value;
	}
	
	function SetQuality( $value )
	{
		$this->Quality = $value;
	}
	
	function Create( $width, $height )
	{
		$this->Width = $width;
		$this->Height = $height;
		if ( function_exists( 'imagecreatetruecolor' ) )
			return $this->Pointer = imagecreatetruecolor( $width, $height );
		else
			return $this->Pointer = imagecreate( $width, $height );
		return false;
	}

...

	function SaveAs( $filaname, $image = false )
	{
		switch ( $this->Extension )
		{
		case 'jpg':
		case 'jpeg':
			if ( $image )
//
//   Этот вариант работает
//
				imagejpeg( $image, $filaname, $this->Quality );
			else
//
//   Этот вариант НЕ РАБОТАЕТ
//
				imagejpeg( $this->Pointer, $filaname, $this->Quality );
			return true;
			break;
		case 'gif':
			imagegif( $this->Pointer, $filaname );
			return true;
			break;
		case 'png':
			imagepng( $this->Pointer, $filaname );
			return true;
			break;
		}
		return false;
	}

};
Мне приходится указательн на картинку вне класса определять.
ПОЧЕМУ ?
 

Макс

Старожил PHPClub
покажи пример использования.
Возможно дело в ссылках и надо писать :
Код:
return &$this->Pointer
в методе Create
 

D!!!

Новичок
Автор оригинала: Макс
покажи пример использования.
Возможно дело в ссылках и надо писать :
Код:
return &$this->Pointer
в методе Create
почитай внимательнее код, там все это есть, я же говорю, что я хочу, чтобы все делалось внутри класса, так намного удобнее и на уровень выше.
почитай внимательно классик
 

IntenT

SkyDiver
D!!!
Не работает - нет такого описания ошибки
print_r поможет
 

D!!!

Новичок
Автор оригинала: IntenT
D!!!
Не работает - нет такого описания ошибки
print_r поможет
Короче говоря НЕ РАБОТАЕТ так, наверное, и не может даже так быть.
кто хочет может воспользоваться моим классом:

PHP:
<?


//==============================================================================
// This file is part of the XSoft Library.
// (c) Copyright 2004-2005 SimpleSoft
//
// This file may be distributed and/or modified under the terms of the
// GNU General Public License version 2 as published by the Free Software
// Foundation and appearing in the file LICENSE.GPL included in the
// packaging of this file.
//
// Licensees holding valid XSoft Commercial licences may use this file
// in accordance with the XSoft Commercial License Agreement included
// with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// See [url]http://www.simple.com.ua/[/url]
//
//==============================================================================

class Image
{
	
//
//	Never use $variable = new Image
//	use Image::
//

	function Image()
	{
	}
	
//
//	Create and return image resource
//
	
	function Create( $width, $height )
	{
		if ( function_exists( 'imagecreatetruecolor' ) )
			return imagecreatetruecolor( $width, $height );
		else
			return imagecreate( $width, $height );
		return false;
	}
	
//
//	Load image from file
//	
	
	function FromFile( $filename, $extension = 'jpg' )
	{
		if ( !file_exists( $filename ) || is_dir( $filename ) ) return false;
		$result = false;
		switch ( $extension )
		{
		case 'jpg':
		case 'jpeg':
			$result = imagecreatefromjpeg( $filename );
			break;
		case 'gif':
			$result = imagecreatefromgif( $filename );
			break;
		case 'png':
			$result = imagecreatefrompng( $filename );
			break;
		}
		return $result;
	}
	
//
//	Save image to file
//
	
	function SaveAs( $image, $filaname, $extension = 'jpg', $quality = 75 )
	{
		switch ( $extension )
		{
		case 'jpg':
		case 'jpeg':
			imagejpeg( $image, $filaname, $quality );
			return true;
			break;
		case 'gif':
			imagegif( $image, $filaname );
			return true;
			break;
		case 'png':
			imagepng( $image, $filaname );
			return true;
			break;
		}
		return false;
	}
	
//
//	Output image
//
	
	function Out( $image, $extension = 'jpg' )
	{
		switch ( $extension )
		{
		case 'jpg':
		case 'jpeg':
			imagejpeg( $image );
			return true;
			break;
		case 'gif':
			imagegif( $image );
			return true;
			break;
		case 'png':
			imagepng( $image );
			return true;
			break;
		}
		return false;
	}

//
//	Resize image
//	
	
	function Resize( $image, $width, $height, $proportional = false )
	{
		$ImWidth = imagesx( $image );
		$ImHeight = imagesy( $image );
		if ( $ImWidth < $width && $ImHeight < $height && !$proportional )
		{
			$_W = $ImWidth;
			$_H = $ImHeight;
		}
		else 
		{
			$cx = $ImWidth / $width;
			$cy = $ImHeight / $height;
			$ca = ( $cx > $cy ) ? $cx : $cy;
			$_W = $ImWidth / $ca;
			$_H = $ImHeight / $ca;
		}
		$tmp = Image::Create( $_W, $_H );
		imagecopyresized( $tmp, $image, 0, 0, 0, 0, $_W, $_H, $ImWidth, $ImHeight );
		imagedestroy( $image );
		return $tmp;
	}
	
};


//
//    Sample use Image
//

$img = Image::FromFile( $filename );
$img = Image::Resize( $img, 500, 400, true );
Image::SaveAs( $img, $newfile );
unlink( $filename );

?>
 

neko

tеam neko
а если я, например, нехочу им пользоваться
что тогда делать?
 

Макс

Старожил PHPClub
Рано тебе классиков читать.
Читай доку по ООП в пхп, в частности про статические вызовы (которые здесь вобщем-то не нужны либо использованы неверно).
 

D!!!

Новичок
Автор оригинала: Макс
Рано тебе классиков читать.
Читай доку по ООП в пхп, в частности про статические вызовы (которые здесь вобщем-то не нужны либо использованы неверно).
Извини, напиши, пожалуйста, где у меня ошибка.
 

IntenT

SkyDiver
D!!!
похоже, ты выбрал неправильную профессию
одумайся, пока не поздно
 

Gas

может по одной?
PHP:
class Image {
   ...
  function SaveAs() 
  {
     ...
     imagejpeg( $this->Pointer, $filaname, $this->Quality );
     ... 
   }
  ...
}

Image::SaveAs();
ну вот скажи как это будет работать в PHP4?
1. читай ещё раз статью, а лучше книгу по OOП.
2. сделай var_dump($this); в SaveAs(); и полумай.
 

Макс

Старожил PHPClub
D!!!
http://www.php.net/manual/ru/keyword.paamayim-nekudotayim.php :
There are class functions, but there are no class variables. In fact, there is no object at all at the time of the call. Thus, a class function may not use any object variables (but it can use local and global variables), and it may no use $this at all.
 

Gas

может по одной?
IntenT
да ладно, не всё сразу. Чувак вроде вменяемый.
 

Gas

может по одной?
А что, это где-то работает?
Не был уверен что в php5 такого нет :) раз уж есть
PHP:
class Class
{
  public static $var;
  function func()
  {
     self::$var = 'value';
  } 
}
Перечитал, точно нет.
 

D!!!

Новичок
Автор оригинала: Gas
PHP:
class Image {
   ...
  function SaveAs() 
  {
     ...
     imagejpeg( $this->Pointer, $filaname, $this->Quality );
     ... 
   }
  ...
}

Image::SaveAs();
ну вот скажи как это будет работать в PHP4?
1. читай ещё раз статью, а лучше книгу по OOП.
2. сделай var_dump($this); в SaveAs(); и полумай.
Блин, ну вы меня совсем не поняли :)
Я же написал первый класс, в котором, делал с внутренней переменной которая НЕ СОХРАНЯЛА значение ссылки на картинку, вот В ЧЕМ БЫЛА МОЯ ПРОБЛЕМА.
Извините, может я что-то не то написал.
Вот как у меня теперь работает класс:
PHP:
<?

//==============================================================================
// This file is part of the XSoft Library.
// (c) Copyright 2004-2005 SimpleSoft
//
// This file may be distributed and/or modified under the terms of the
// GNU General Public License version 2 as published by the Free Software
// Foundation and appearing in the file LICENSE.GPL included in the
// packaging of this file.
//
// Licensees holding valid XSoft Commercial licences may use this file
// in accordance with the XSoft Commercial License Agreement included
// with the software.
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// See [url]http://www.simple.com.ua/...[/url]
//
//==============================================================================

class Image
{
	
//
//	Never use $variable = new Image
//	use Image::
//

	function Image()
	{
	}
	
//
//	Create and return image resource
//
	
	function Create( $width, $height )
	{
		if ( function_exists( 'imagecreatetruecolor' ) )
			return imagecreatetruecolor( $width, $height );
		else
			return imagecreate( $width, $height );
		return false;
	}
	
//
//	Load image from file
//	
	
	function FromFile( $filename, $extension = 'jpg' )
	{
		if ( !file_exists( $filename ) || is_dir( $filename ) ) return false;
		$result = false;
		switch ( $extension )
		{
		case 'jpg':
		case 'jpeg':
			$result = imagecreatefromjpeg( $filename );
			break;
		case 'gif':
			$result = imagecreatefromgif( $filename );
			break;
		case 'png':
			$result = imagecreatefrompng( $filename );
			break;
		}
		return $result;
	}
	
//
//	Save image to file
//
	
	function SaveAs( $image, $filaname, $extension = 'jpg', $quality = 75 )
	{
		switch ( $extension )
		{
		case 'jpg':
		case 'jpeg':
			imagejpeg( $image, $filaname, $quality );
			return true;
			break;
		case 'gif':
			imagegif( $image, $filaname );
			return true;
			break;
		case 'png':
			imagepng( $image, $filaname );
			return true;
			break;
		}
		return false;
	}
	
//
//	Output image
//
	
	function Out( $image, $extension = 'jpg' )
	{
		switch ( $extension )
		{
		case 'jpg':
		case 'jpeg':
			imagejpeg( $image );
			return true;
			break;
		case 'gif':
			imagegif( $image );
			return true;
			break;
		case 'png':
			imagepng( $image );
			return true;
			break;
		}
		return false;
	}

//
//	Resize image
//	
	
	function Resize( $image, $width, $height, $proportional = false )
	{
		$ImWidth = imagesx( $image );
		$ImHeight = imagesy( $image );
		if ( $ImWidth < $width && $ImHeight < $height && !$proportional )
		{
			$_W = $ImWidth;
			$_H = $ImHeight;
		}
		else 
		{
			$cx = $ImWidth / $width;
			$cy = $ImHeight / $height;
			$ca = ( $cx > $cy ) ? $cx : $cy;
			$_W = $ImWidth / $ca;
			$_H = $ImHeight / $ca;
		}
		$tmp = Image::Create( $_W, $_H );
		imagecopyresized( $tmp, $image, 0, 0, 0, 0, $_W, $_H, $ImWidth, $ImHeight );
		imagedestroy( $image );
		return $tmp;
	}
	
};

?>
 

SiMM

Новичок
> Не был уверен что в php5 такого нет
Хм... ладно. А ты не пробовал думать на тему (неважно, какой язык программирования), как может существовать указатель на "текущий" экземпляр класса/объект ($this), если самого объекта ещё в помине не существует? this не нужен только статическим методам/свойствам (язык программирования тут не при чём).
PS: это не придирки, а просто попытка сформировать, на мой взгляд, правильное представление :)
 

D!!!

Новичок
Автор оригинала: SiMM
> Не был уверен что в php5 такого нет
Хм... ладно. А ты не пробовал думать на тему (неважно, какой язык программирования), как может существовать указатель на "текущий" экземпляр класса/объект ($this), если самого объекта ещё в помине не существует? this не нужен только статическим методам/свойствам (язык программирования тут не при чём).
PS: это не придирки, а просто попытка сформировать, на мой взгляд, правильное представление :)
Люди, объясняю в сотый раз как все было, и что я хотел узнать от вас, к сожалению ничего не добившись.
У меня был класс, внутри него ссылка на картинку $this->Pointer = 0, когда я загружал картинку из файла или просто создавал, то присваивал значение $this->Pointer = ... соответственно он указывал на эту картинку, и при print( $this->Pointer ) он выдавал Resource #22. Только вот при работе с этим указателем писалась ошибка Resource #22 is not valid image resource. Вот и все, как я понял, просто так нельзя и все.
 
Сверху