Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Начало работы с ООП. Вопросы, возникающие на практике

Ответить
Настройки темы
[решено] Начало работы с ООП. Вопросы, возникающие на практике

Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Про ООП читал. Читал много.
Примеры просматривал, и со всем соглашался, все ясно.

Но начал создавать что то сам, и получается ошибка:
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION

То, что я пытался сочинить приводить не буду, там нудно и не интересно.
Приведу в простом примере:

Код: Выделить весь код
<?
class Webpage {
var $bgcolor;
 function test($color) {
 	return $color;
 }
 $this->bgcolor = test("Brown");
}

// Вызвать конструктор класса Webpage
$page = new Webpage;
echo $page->bgcolor;
?>
т.е. внутри класса создаю функцию, и в самом класе изменить значение обьекта.
Почему так нельзя? Обьясните пожалуйста, если можно.

Спасибо

-------
Мой блог Web Development


Отправлено: 23:28, 05-02-2010

 

Deadooshka


Сообщения: 2511
Благодарности: 689

Профиль | Отправить PM | Цитировать


$this->test() (this и к методу тоже).
Цитата Artem-Samsung:
внутри класса создаю функцию »
это уже метод...
Цитата Artem-Samsung:
// Вызвать конструктор класса Webpage »
экземпляр, ибо конструктор - метод с именем класса (или __construct в PHP5)

изучайте ООП в PHP5+, оно более продвинуто в сравнении с ООП PHP4-

мануалы по ООП: PHP4, PHP5.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:52, 05-02-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Спасибо, таки да, это метод.
тогда я выношу функцию

Код: Выделить весь код
function test($color) {
 return $color;
}
class Webpage {
var $bgcolor;
 $this->bgcolor = test("Brown");
}
$page = new Webpage;
echo $page->bgcolor;
?>

Так она тоже не работает?

-------
Мой блог Web Development


Отправлено: 01:15, 06-02-2010 | #3


Deadooshka


Сообщения: 2511
Благодарности: 689

Профиль | Отправить PM | Цитировать


Не работает, потому что операции с переменными/свойствами внутри класса должны выполняться только в теле методов. В вашем случае можно засунуть строку в метод-конструктор Webpage.

PHP код: Выделить весь код

<?php
class Webpage {
   var 
$bgcolor;

   function 
Webpage() {
      
$this->bgcolor $this->test("Brown");
   }

   function 
test($color) {
      return 
$color;
   }
}

$page = new Webpage;
echo 
$page->bgcolor;
?>

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:54, 06-02-2010 | #4


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


подскажите, что не так. как сделать лучше?

PHP код: Выделить весь код

<?php
class de_captcha {

    var 
$captcha "1234";
    var 
$bg "captcha.jpg";
    var 
$R 0;    var $G 0;    var $B 0;
    var 
$h1 5;    var $h2 35;
    var 
$v1 17;    var $v2 23;
    var 
$im; var $color; var $hor; var $vert;
    
    function 
generate_image() {
        
$this->im ImageCreateFromJPEG ($this->bg);
        
$this->color imagecolorallocate($this->im$this->R$this->G$this->B);

        
$this->hor rand($this->h1,$this->h2);
        
$this->vert rand($this->h1,$this->h2);

        
imagettftext($this->im120$this->hor$this->vert$this->color
            
"/web/sites/godlight.kiev.ua/advertmf.ttf",  $this->captcha);
        
imagejpeg($this->imNULL100);
        
imagedestroy($this->im);
    }
}
?>

PHP код: Выделить весь код

<?php

session_start
();
include 
'../lib/class.captcha.php';
$_SESSION['captcha'] = rand(100,999);

$a = new de_captcha();
$a->captcha $_SESSION['captcha'];
$a->generate_image();

?>

Это я обычный свой модуль хочу попробовать в классы перевести.
PHP код: Выделить весь код

$_SESSION['captcha'] = rand(100,999);
header("Content-type: image/jpeg");
$im ImageCreateFromJPEG ("captcha.jpg");
$color imagecolorallocate($im118138130);

$hor rand(5,35);
$vert rand(17,23);
imagettftext($im120$hor$vert$color"advertmf.ttf",  $_SESSION['captcha']);
imagejpeg($imNULL100);
imagedestroy($im); 

текст на картинке не отображается

-------
Мой блог Web Development


Последний раз редактировалось Artem-Samsung, 08-02-2010 в 23:34.


Отправлено: 23:13, 08-02-2010 | #5


Deadooshka


Сообщения: 2511
Благодарности: 689

Профиль | Отправить PM | Цитировать


Зачем столько public-свойств, если внешне они не нужны? Используйте обычные переменные по возможности.
Цитата Artem-Samsung:
екст на картинке не отображается »
имхо смотрите файл шрифта, путь или шрифт... скопируйте arial.ttf в папку скрипта и укажите просто "arial.ttf". Также смотрите, чтобы ничего лишнего не выводилось.

Цитата Artem-Samsung:
header("Content-type: image/jpeg"); »
заголовок тоже не забудьте
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:51, 10-02-2010 | #6


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


С текстом я разобрался, забыл написать, да дело было со шрифтом.
Переменные паблик для того, что я мог при возможности задавать новые свойства для каптчи, если понадобится.
вот только можно избавиться разве что от

var $h1 = 5; var $h2 = 35;
var $v1 = 17; var $v2 = 23;

если решу вопрос в соседней теме)

-------
Мой блог Web Development


Отправлено: 12:55, 10-02-2010 | #7


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Вот как я красивенько сделал :

PHP код: Выделить весь код

<?php

class de_captcha {

    var 
$captcha;
    var 
$bg;
    var 
$size;
    var 
$color;
    var 
$font;
    
    function 
__construct($captcha$bg$size$color$font) {
        
$this->captcha $captcha;
        
$this->bg $bg;
        
$this->size $size;
        
$this->color $color;
        
$this->font $font;
    }


    function 
generate_image() {
        
$im ImageCreateFromJPEG ($this->bg);
        
        
$color explode(","$this->color);
        
$color imagecolorallocate($imtrim($color[0]), trim($color[1]), trim($color[2]));
        
$font_size imagettfbbox ($this->size $this->font $this->captcha);
        
        
$height abs($font_size[1]) + abs($font_size[7]);
        
$width    abs($font_size[0]) + abs($font_size[2]);
        
        
$imgwidth imagesx($im);
        
$imgheight imagesy($im);
        
        
$x1 3;        $x2 $imgwidth-$width-2;
        
$y1 $height;    $y2 $imgheight-2;
        
        
$x rand($x1,$x2);
        
$y rand($y1,$y2);

        
imagettftext($im$this->size0$x$y$color$this->font$this->captcha);
        
imagejpeg($imNULL100);
        
imagedestroy($im);
    }
}
?>





Запускается клас так:

PHP код: Выделить весь код

<?php

header
("Content-type: image/jpeg");
session_start();
include 
'../lib/class.captcha.php';
$_SESSION['captcha'] = rand (100999);
$a = new de_captcha($_SESSION['captcha'], "captcha/captcha.jpg"12"83,115,174""captcha/advertmf.ttf");
$a->generate_image();
?>

-------
Мой блог Web Development


Последний раз редактировалось Artem-Samsung, 10-02-2010 в 21:00.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:30, 10-02-2010 | #8


Deadooshka


Сообщения: 2511
Благодарности: 689

Профиль | Отправить PM | Цитировать


Цитата Artem-Samsung:
function __construct »
не смешивайте ооп php4 и 5. В PHP5 вместо var используется public/private/protected.
__construct - это в php5, в 4 метод-конструктор с именем класса. Лучше сразу все оформить в стиле php5.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:53, 10-02-2010 | #9


Аватара для Artem-Samsung

Ветеран


Сообщения: 823
Благодарности: 53

Профиль | Сайт | Отправить PM | Цитировать


Цитата Sham:
не смешивайте ооп php4 и 5. В PHP5 вместо var используется public/private/protected.
__construct - это в php5, в 4 метод-конструктор с именем класса. Лучше сразу все оформить в стиле php5. »
Спасибо большое. Буду править.

-------
Мой блог Web Development


Отправлено: 20:55, 10-02-2010 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Начало работы с ООП. Вопросы, возникающие на практике

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
начало работы с wine Nurtek Программное обеспечение Linux и FreeBSD 4 07-12-2009 02:36
Воспроизведение 1920*1080-есть пара вопросов на практике. 12341234 Видео и аудио: обработка и кодирование 7 26-08-2009 20:08
Delphi - Delphi, ООП Roman Go Программирование и базы данных 1 10-11-2002 17:22




 
Переход