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:
вот пример выше. прогнать массив через класс. Что в классе - неинтересно. Просто класс вызвали, в него передали параметр. получили параметр. затупил с утра блядь
цитата
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:
капитан очевидность
Вот есть чей-то класс (похуй чей и где и когда написан и где лежит). Класс выполняет 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:
Нельзя так получить значение, как ты пишешь. Сколько раз еще тебе это нужно сказать, что бы эта простая истина стала понятной?
Через переменные внутренние (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
Оффтопик:
я думаю, по краней мере, надеюсь, что все поняли друг друга
Последний раз редактировалось: freeek (
01/07/10 в 01:22
), всего редактировалось 1 раз
цитата
01/07/10 в 01:21
freeek
Dr.Syshalt писал:
Оффтопик:
Мастер - источник нововведений, уже "программирование классами" придумали.
Оффтопик:
не удержался
, такой термин, давно сущетсвует и дело даже не в статике, просто взявшись написать, - 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
Новая тема
Ответить
Эта страница в полной версии