Реклама на сайте Advertise with us

PHP OOP

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 29/06/10 в 13:07       Ответить с цитатойцитата 

Цитата:

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() не предлагать.

0
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 29/06/10 в 13:19       Ответить с цитатойцитата 

FXIX писал:

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

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

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


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

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

ты в самом начале ошибся - вроде и понимаешь, что new возвращает новый экземпляр класса, а все равно пытаешься обмануть природу.

нету у меня подписи...

4
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 29/06/10 в 13:19       Ответить с цитатойцитата 

могу по-другому сформулировать

Цитата:

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

0
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 29/06/10 в 13:22       Ответить с цитатойцитата 

Еugene: вот пример выше. прогнать массив через класс. Что в классе - неинтересно. Просто класс вызвали, в него передали параметр. получили параметр. затупил с утра блядь icon_mad.gif smail101.gif

0
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 29/06/10 в 13:27       Ответить с цитатойцитата 

вот пример на процедурном

Цитата:

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

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

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

print_r($num); // правильно работает

0
 



С нами с 21.09.03
Сообщения: 7329
Рейтинг: 2144

Ссылка на сообщениеДобавлено: 29/06/10 в 13:34       Ответить с цитатойцитата 

Странно как-то ты пытаешься получить код возрата конструктора. Так ты не получишь эту величину IMHO. Надо через переменную.

Моя подпись.

4
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 29/06/10 в 13:40       Ответить с цитатойцитата 

FXIX:
Ты не читаешь то, что тебе пишут.
Ну и стоит почитать какие-то книжки по ООП. ты самого принципа создания объекта не понимаешь. Конструктор - это не обычная функция аля return $a+$b

нету у меня подписи...

4
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 29/06/10 в 14:19       Ответить с цитатойцитата 

return не пойдет
public var и в конструктуре определяй ее

крипта на ByBit

4
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 29/06/10 в 14:25       Ответить с цитатойцитата 

Е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);

мне не надо

0
 

programmer

С нами с 08.12.02
Сообщения: 7607
Рейтинг: 5752

Ссылка на сообщениеДобавлено: 29/06/10 в 14:30       Ответить с цитатойцитата 

класс создает экземпляр объекта.
он не должен в ссылке что то возвращать кроме объекта

крипта на ByBit

4
 



С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870

Ссылка на сообщениеДобавлено: 29/06/10 в 14:51       Ответить с цитатойцитата 

Sterx:
Чукча не читатель, чукча - писатель.
Ты уже 3й ему это говоришь.. Он все равно не читает.

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

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

учителю информатики надо яйца на уши натягивать, за такую дезу.

нету у меня подписи...

4
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 29/06/10 в 15:14       Ответить с цитатойцитата 

FXIX: Конструктор не возвращает значение, не должен. В принципе - никогда и нигде. Это просто код, который вызывается после выделения памяти под объект для инициализации атрибутов объекта - все, больше там не должно быть ничего. Нельзя делать return $value из конструктора - PHP просто похуистично дропает твой return, в его обычной манере, молча. В нормальном языке типа Java или C++ тебя бы компилятор еще ткнул носом в это - в твой return со значением из конструктора.

4
 



С нами с 01.03.06
Сообщения: 629
Рейтинг: 620

Ссылка на сообщениеДобавлено: 29/06/10 в 16:13       Ответить с цитатойцитата 

хз что, если класс нужен только для того что бы выполнить функцию Х, то 1) почему бы не использовать просто функцию Х, 2) если именно нужда в классах, то дергайте статические методы...

Код: [развернуть]

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

4
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 29/06/10 в 17:50       Ответить с цитатойцитата 

всем спасибо. разобрался

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 30/06/10 в 07:29       Ответить с цитатойцитата 

Оффтопик: ООП и програмирование классами, имхо разные вещи

0
 

Чингачгук, вождь красноглазых

С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824

Ссылка на сообщениеДобавлено: 30/06/10 в 10:20       Ответить с цитатойцитата 

Оффтопик: Мастер - источник нововведений, уже "программирование классами" придумали.

0
 



С нами с 24.06.10
Сообщения: 2686
Рейтинг: 543

Ссылка на сообщениеДобавлено: 30/06/10 в 18:16       Ответить с цитатойцитата 

Оффтопик: Программирование классами - это когда все методы и свойства static )

0
 

Добрых Дел Мастер

С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227

Ссылка на сообщениеДобавлено: 30/06/10 в 18:44       Ответить с цитатойцитата 

Оффтопик: а еще ими можно эмулировать неймспейсы

0
 



С нами с 24.06.10
Сообщения: 2686
Рейтинг: 543

Ссылка на сообщениеДобавлено: 30/06/10 в 19:31       Ответить с цитатойцитата 

Оффтопик: кстати, да, но в пыхе вложенных классов нет, зато в 5.3 нэймспейсы уже имеются

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 01/07/10 в 01:10       Ответить с цитатойцитата 

Оффтопик: я думаю, по краней мере, надеюсь, что все поняли друг друга smail54.gif

Последний раз редактировалось: freeek (01/07/10 в 01:22), всего редактировалось 1 раз

0
 



С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134

Ссылка на сообщениеДобавлено: 01/07/10 в 01:21       Ответить с цитатойцитата 

Dr.Syshalt писал:
Оффтопик: Мастер - источник нововведений, уже "программирование классами" придумали.


Оффтопик: не удержался icon_smile.gif, такой термин, давно сущетсвует и дело даже не в статике, просто взявшись написать, - Hello World!, используя class, ведут разговор про ооп

0
 



С нами с 27.04.06
Сообщения: 72
Рейтинг: 20

Ссылка на сообщениеДобавлено: 07/07/10 в 14:16       Ответить с цитатойцитата 

Вопрос в тему - Господа, а как сделать, чтобы на велосипеде можно было ездить на раме и яйца на кочках не отбивало? Сравнять кочки не предлагать!

0
 



С нами с 20.09.07
Сообщения: 26
Рейтинг: 3

Ссылка на сообщениеДобавлено: 30/07/10 в 00:28       Ответить с цитатойцитата 

Забавный вопрос.
Конструктор не может ничего возвращать.
Можно узнать, для чего этот изврат понадобился?
Такой функционал реализуется с помощью функций, но если уж очень хочется заставить класс работать как функцию, то в php 5.3 ввели магический метод __invoke()

Код:

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

0
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »