Добрых Дел Мастер
С нами с 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() не предлагать.
|
|
|
|
С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870
|
Добавлено: 29/06/10 в 13:19 |
FXIX писал: |
По идее $a - объект. |
дальше можешь даже не углубляться.
$a - объект и этим всё сказано.
объяви public переменную
public $x;
и в конструкторе присваивай
$this->x = $x*$x;
вместо возвращение значения.
ну а потом значение возьмешь
echo $a->x;
ты в самом начале ошибся - вроде и понимаешь, что new возвращает новый экземпляр класса, а все равно пытаешься обмануть природу.
|
|
|
|
Добрых Дел Мастер
С нами с 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
|
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 29/06/10 в 13:22 |
Еugene: вот пример выше. прогнать массив через класс. Что в классе - неинтересно. Просто класс вызвали, в него передали параметр. получили параметр. затупил с утра блядь
|
|
|
|
Добрых Дел Мастер
С нами с 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); // правильно работает
|
|
|
|
|
С нами с 21.09.03
Сообщения: 7329
Рейтинг: 2144
|
Добавлено: 29/06/10 в 13:34 |
Странно как-то ты пытаешься получить код возрата конструктора. Так ты не получишь эту величину IMHO. Надо через переменную.
|
|
|
|
С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870
|
Добавлено: 29/06/10 в 13:40 |
FXIX:
Ты не читаешь то, что тебе пишут.
Ну и стоит почитать какие-то книжки по ООП. ты самого принципа создания объекта не понимаешь. Конструктор - это не обычная функция аля return $a+$b
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 29/06/10 в 14:19 |
return не пойдет
public var и в конструктуре определяй ее
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 29/06/10 в 14:25 |
Еugene: капитан очевидность
Вот есть чей-то класс (похуй чей и где и когда написан и где лежит). Класс выполняет 1 действие. Принимает на вход число и отдает результатом число. Другой человек подключает класс
Цитата: |
include 'Class1.php';
|
передает число
Цитата: |
$a=new Class1(2);
|
должен просто получить результат
Какие там внутри методы и реализация - никому не надо ничего знать и самому руками никакие методы вызывать. Т.е. такие варианты
Цитата: |
$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);
|
мне не надо
|
|
|
|
programmer
С нами с 08.12.02
Сообщения: 7613
Рейтинг: 5760
|
Добавлено: 29/06/10 в 14:30 |
класс создает экземпляр объекта.
он не должен в ссылке что то возвращать кроме объекта
|
|
|
|
С нами с 10.12.03
Сообщения: 1615
Рейтинг: 870
|
Добавлено: 29/06/10 в 14:51 |
Sterx:
Чукча не читатель, чукча - писатель.
Ты уже 3й ему это говоришь.. Он все равно не читает.
TC:
Нельзя так получить значение, как ты пишешь. Сколько раз еще тебе это нужно сказать, что бы эта простая истина стала понятной?
Через переменные внутренние (e.g. public) это делай.
FXIX писал: | класс принял число и отдал на выходе число. |
учителю информатики надо яйца на уши натягивать, за такую дезу.
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 29/06/10 в 15:14 |
FXIX: Конструктор не возвращает значение, не должен. В принципе - никогда и нигде. Это просто код, который вызывается после выделения памяти под объект для инициализации атрибутов объекта - все, больше там не должно быть ничего. Нельзя делать return $value из конструктора - PHP просто похуистично дропает твой return, в его обычной манере, молча. В нормальном языке типа Java или C++ тебя бы компилятор еще ткнул носом в это - в твой return со значением из конструктора.
|
|
|
|
С нами с 01.03.06
Сообщения: 629
Рейтинг: 620
|
Добавлено: 29/06/10 в 16:13 |
хз что, если класс нужен только для того что бы выполнить функцию Х, то 1) почему бы не использовать просто функцию Х, 2) если именно нужда в классах, то дергайте статические методы...
Код: [развернуть] |
abstract class Class2 {
public static function do_it($a) {
return $a*4;
}
}
echo Class2::do_it(3);
|
можно навесить сверху обязательность выполнения интерфейса какого-то, и не думать что за начинка у класса.
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 29/06/10 в 17:50 |
всем спасибо. разобрался
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 30/06/10 в 07:29 |
Оффтопик: ООП и програмирование классами, имхо разные вещи
|
|
|
|
Чингачгук, вождь красноглазых
С нами с 14.05.04
Сообщения: 4744
Рейтинг: 1824
|
Добавлено: 30/06/10 в 10:20 |
Оффтопик: Мастер - источник нововведений, уже "программирование классами" придумали.
|
|
|
|
С нами с 24.06.10
Сообщения: 2686
Рейтинг: 543
|
Добавлено: 30/06/10 в 18:16 |
Оффтопик: Программирование классами - это когда все методы и свойства static )
|
|
|
|
Добрых Дел Мастер
С нами с 03.05.08
Сообщения: 3143
Рейтинг: 1227
|
Добавлено: 30/06/10 в 18:44 |
Оффтопик: а еще ими можно эмулировать неймспейсы
|
|
|
|
С нами с 24.06.10
Сообщения: 2686
Рейтинг: 543
|
Добавлено: 30/06/10 в 19:31 |
Оффтопик: кстати, да, но в пыхе вложенных классов нет, зато в 5.3 нэймспейсы уже имеются
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 01/07/10 в 01:10 |
Оффтопик: я думаю, по краней мере, надеюсь, что все поняли друг друга
Последний раз редактировалось: freeek (01/07/10 в 01:22), всего редактировалось 1 раз
|
|
|
|
С нами с 05.05.05
Сообщения: 1913
Рейтинг: 1134
|
Добавлено: 01/07/10 в 01:21 |
Dr.Syshalt писал: | Оффтопик: Мастер - источник нововведений, уже "программирование классами" придумали. |
Оффтопик: не удержался , такой термин, давно сущетсвует и дело даже не в статике, просто взявшись написать, - Hello World!, используя class, ведут разговор про ооп
|
|
|
|
С нами с 27.04.06
Сообщения: 72
Рейтинг: 20
|
Добавлено: 07/07/10 в 14:16 |
Вопрос в тему - Господа, а как сделать, чтобы на велосипеде можно было ездить на раме и яйца на кочках не отбивало? Сравнять кочки не предлагать!
|
|
|
|
С нами с 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
|
|
|
|
|