Пытаюсь рисовать фигуры, общий класс для изображения, и подклассы для фигур index.php Код (Text): <?php Header("Content-Type: text/html; charset=UTF-8"); require('newclass.php'); $drawArea = new Geometry(800, 600); $figura = new Triangle(15); $figura->draw(300, 300); $drawArea->getImage(); newclass.php Код (Text): <?php class Geometry { protected static $img; protected $background_color; protected static $white; protected static $red; protected static $blue; protected $imgW; protected $imgH; protected static $scale = 10; public function __construct($width, $height) { $this->imgW = $width; $this->imgH = $height; header("Content-type: image/png"); $this->img = imagecreate($width, $height); $background_color = imagecolorallocate($this->img, 255, 255, 255); $white = imagecolorallocate($this->img, 255, 255, 255); $red = imagecolorallocate($this->img, 255, 0, 0); $blue = imagecolorallocate($this->img, 0, 0, 255); imagefill($this->img, 0, 0, $background_color); imagecolortransparent($this->img, $white); imagearc($this->img, 100, 100, 120, 120, 0, 360, $blue); imagearc($this->img, 120, 140, 120, 120, 0, 360, $blue); } public function getImage() { imagepng($this->img); imagedestroy($this->img); } } class Triangle extends Geometry { private $posX; private $posY; private $size; public function __construct($size) { $this->size = parent::$scale * $size; } public function draw($x, $y) { imagearc(parent::$img, 150, 150, 100, 100, 0, 360, $red); } } выдает ошибку imagearc(): supplied argument is not a valid Image resource in Z:\home\test.h\www\newclass.php on line 52 ничего не могу понять, вроде правильно все написано... часа 4 промучился, гугл перелопатил, нигде подобный вопрос не рассматривается
выдает ошибку imagearc(): supplied argument is not a valid Image resource in Z:\home\test.h\www\newclass.php on line 52 ничего не могу понять, вроде правильно все написано... часа 4 промучился, гугл перелопатил, нигде подобный вопрос не рассматривается вот эта ошибка возникает, как ее устранить? если строчку 52 закомментить, то никакой ошибки нет.
imagearc на 52 строке, перепроверь первый аргумент, ты туда что-то другое передаёшь, а что должен читай в документации к этой функции.
когда просто передаю, вне классов работает все, например вот такая конструкция Код (Text): header("Content-type: image/png"); $img = imagecreate(800, 600); $background_color = imagecolorallocate($img, 255, 255, 230); imagefill($img, 0, 0, $background_color); $blue = imagecolorallocate($img, 0, 0, 255); imagecolortransparent($img, $background_color); imagearc($img, 100, 100, 120, 120, 0, 360, $blue); imagepng($img); imagedestroy($img); Добавлено спустя 3 минуты 25 секунд: могу тебе купить пистолет с одним патроном. чтобы ты застрелился, блять...
я знаю что там написано. тут проблема скорее не в функции imagearc, а в том, что надо как то по другому обращаться к переменной $img родительского класса Geometry.
У тебя логика не правильная: 1. ты переопределил конструктор, и у тебя во втором классе нет ничего путного в $this->img, т.к. она не заполнялась никаким содержимым, и вообще она статик, и к ней так обращаться нельзя. 2. если ты хочешь сделать так, чтобы в скрипте существовала только одна Geometry, то тебе надо все нужные ей свойства которые должны работать в том единственном экземпляре сделать статиками, или реализовать человческий синглтон, что предпочтительнее. Если ты делаешь геометрию всю на статиках, то конструктор не нужен, объект создавать не нужно, нужно задать просто параметры и вызвать некий метод для создания холста. ну короче вот на статиках, но я бы делал синглтон и не парился. А ещё лучше так не делать рисовашку вообще наверное =) Код (PHP): class Geometry { protected static $img; protected static $background_color; protected static $white; protected static $red; protected static $blue; protected static $imgW; protected static $imgH; protected static $scale = 10; public function __construct($width, $height) { static::$imgW = $width; static::$imgH = $height; header("Content-type: image/png"); static::$img = imagecreate($width, $height); static::$background_color = imagecolorallocate(static::$img, 255, 255, 255); static::$white = imagecolorallocate(static::$img, 255, 255, 255); static::$red = imagecolorallocate(static::$img, 255, 0, 0); static::$blue = imagecolorallocate(static::$img, 0, 0, 255); imagefill(static::$img, 0, 0, static::$background_color); imagecolortransparent(static::$img, static::$white); imagearc(static::$img, 100, 100, 120, 120, 0, 360, static::$blue); imagearc(static::$img, 120, 140, 120, 120, 0, 360, static::$blue); } public function getImage() { imagepng(static::$img); imagedestroy(static::$img); } } class Triangle extends Geometry { private $size; public function __construct($size) { $this->size = static::$scale * $size; } public function draw($x, $y) { imagearc(static::$img, $x, $y, $this->size, $this->size, 0, 360, static::$red); } } $drawArea = new Geometry(800, 600); $figura = new Triangle(15); $figura->draw(300, 300); $figura->draw(200, 100); $drawArea->getImage();