Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: PHP OOP
цитата
29/06/10 в 13:07
 FXIX
Цитата:

Class1.php:

class Class1 {
function __construct($x) {
return $x*$x;
}
}

other.php:

include 'Class1.php';
$a=new Class1(2);
echo $a;


почему в $a не падает 4?
т.е. внутри произвольного кода (other.php) вызывается класс (создается объект класса и в него передается параметр). Класс возвращает результат вычисления. с которым потом можно дальше работать

По идее $a - объект. Но внутри класса один метод и он отрабатывает и возвращает число. Т.е. класс принял число и отдал на выходе число.
__toString() не предлагать.
цитата
29/06/10 в 13:19
 Еugene
FXIX писал:

По идее $a - объект.

дальше можешь даже не углубляться.

$a - объект и этим всё сказано.


объяви public переменную
public $x;
и в конструкторе присваивай
$this->x = $x*$x;
вместо возвращение значения.

ну а потом значение возьмешь
echo $a->x;

ты в самом начале ошибся - вроде и понимаешь, что new возвращает новый экземпляр класса, а все равно пытаешься обмануть природу.
цитата
29/06/10 в 13:19
 FXIX
могу по-другому сформулировать

Цитата:

class Class1 {
function __construct($x) {
return $x+5;
}
}

$num=array (1,2,3,4,5);

foreach ($num as &$value) {
$value=new Class1($value);
}

print_r($num); // на выходе должен быть массив 6,7,8,9,10

цитата
29/06/10 в 13:22
 FXIX
Еugene: вот пример выше. прогнать массив через класс. Что в классе - неинтересно. Просто класс вызвали, в него передали параметр. получили параметр. затупил с утра блядь icon_mad.gif smail101.gif
цитата
29/06/10 в 13:27
 FXIX
вот пример на процедурном

Цитата:

function rrr($x) {
return $x+5;
}

$num=array (1,2,3,4,5);

foreach ($num as &$value) {
$value=rrr($value);
}

print_r($num); // правильно работает
цитата
29/06/10 в 13:34
 lega_cobra
Странно как-то ты пытаешься получить код возрата конструктора. Так ты не получишь эту величину IMHO. Надо через переменную.
цитата
29/06/10 в 13:40
 Еugene
FXIX:
Ты не читаешь то, что тебе пишут.
Ну и стоит почитать какие-то книжки по ООП. ты самого принципа создания объекта не понимаешь. Конструктор - это не обычная функция аля return $a+$b
цитата
29/06/10 в 14:19
 Sterx
return не пойдет
public var и в конструктуре определяй ее
цитата
29/06/10 в 14:25
 FXIX
Еugene: капитан очевидность smail101.gif

Вот есть чей-то класс (похуй чей и где и когда написан и где лежит). Класс выполняет 1 действие. Принимает на вход число и отдает результатом число. Другой человек подключает класс
Цитата:

include 'Class1.php';


передает число
Цитата:

$a=new Class1(2);

должен просто получить результат
Цитата:

echo $a; // 4


Какие там внутри методы и реализация - никому не надо ничего знать и самому руками никакие методы вызывать. Т.е. такие варианты

Цитата:

$num=array (1,2,3,4,5);

class Class1 {
function rrr($x) {
return $x+5;
}
}

foreach ($num as &$value) {
$a=new Class1($value);
$value=$a->rrr($value);
}
print_r($num);
//-----------------------------------------------------------------------------
$num=array (1,2,3,4,5);

class Class2 {
static function rrr($x) {
return $x+5;
}
}

foreach ($num as &$value) {
$value=Class2::rrr($value);

}

print_r($num);
//-----------------------------------------------------------------------------
$num=array (1,2,3,4,5);

class Class3 {
function __construct($x) {
return $this->result=$x+5;
}
}

foreach ($num as &$value) {
$a=new Class3($value);
$value=$a->result;
}

print_r($num);

мне не надо
цитата
29/06/10 в 14:30
 Sterx
класс создает экземпляр объекта.
он не должен в ссылке что то возвращать кроме объекта
цитата
29/06/10 в 14:51
 Еugene
Sterx:
Чукча не читатель, чукча - писатель.
Ты уже 3й ему это говоришь.. Он все равно не читает.

TC:
Нельзя так получить значение, как ты пишешь. Сколько раз еще тебе это нужно сказать, что бы эта простая истина стала понятной? icon_smile.gif
Через переменные внутренние (e.g. public) это делай.

FXIX писал:
класс принял число и отдал на выходе число.

учителю информатики надо яйца на уши натягивать, за такую дезу.
цитата
29/06/10 в 15:14
 Dr.Syshalt
FXIX: Конструктор не возвращает значение, не должен. В принципе - никогда и нигде. Это просто код, который вызывается после выделения памяти под объект для инициализации атрибутов объекта - все, больше там не должно быть ничего. Нельзя делать return $value из конструктора - PHP просто похуистично дропает твой return, в его обычной манере, молча. В нормальном языке типа Java или C++ тебя бы компилятор еще ткнул носом в это - в твой return со значением из конструктора.
цитата
29/06/10 в 16:13
 Heavy
хз что, если класс нужен только для того что бы выполнить функцию Х, то 1) почему бы не использовать просто функцию Х, 2) если именно нужда в классах, то дергайте статические методы...


abstract class Class2 {
   public static function do_it($a) {
       return $a*4;
   }
}

echo Class2::do_it(3);

можно навесить сверху обязательность выполнения интерфейса какого-то, и не думать что за начинка у класса.
цитата
29/06/10 в 17:50
 FXIX
всем спасибо. разобрался
цитата
30/06/10 в 07:29
 freeek
Оффтопик: ООП и програмирование классами, имхо разные вещи
цитата
30/06/10 в 10:20
 Dr.Syshalt
Оффтопик: Мастер - источник нововведений, уже "программирование классами" придумали.
цитата
30/06/10 в 18:16
 mr. snatch
Оффтопик: Программирование классами - это когда все методы и свойства static )
цитата
30/06/10 в 18:44
 FXIX
Оффтопик: а еще ими можно эмулировать неймспейсы
цитата
30/06/10 в 19:31
 mr. snatch
Оффтопик: кстати, да, но в пыхе вложенных классов нет, зато в 5.3 нэймспейсы уже имеются
цитата
01/07/10 в 01:10
 freeek
Оффтопик: я думаю, по краней мере, надеюсь, что все поняли друг друга smail54.gif

Последний раз редактировалось: freeek (01/07/10 в 01:22), всего редактировалось 1 раз
цитата
01/07/10 в 01:21
 freeek
Dr.Syshalt писал:
Оффтопик: Мастер - источник нововведений, уже "программирование классами" придумали.


Оффтопик: не удержался icon_smile.gif, такой термин, давно сущетсвует и дело даже не в статике, просто взявшись написать, - Hello World!, используя class, ведут разговор про ооп
цитата
07/07/10 в 14:16
 Toor
Вопрос в тему - Господа, а как сделать, чтобы на велосипеде можно было ездить на раме и яйца на кочках не отбивало? Сравнять кочки не предлагать!
цитата
30/07/10 в 00:28
 KillAllHumans
Забавный вопрос.
Конструктор не может ничего возвращать.
Можно узнать, для чего этот изврат понадобился?
Такой функционал реализуется с помощью функций, но если уж очень хочется заставить класс работать как функцию, то в php 5.3 ввели магический метод __invoke()

Код:

class Test
{
    public function __invoke ()
    {
        return 123;
    }
}
$func = new Test();
echo $func(); //123


Эта страница в полной версии