вызов другого метода oop

1. lolpetyaz (24.07.2015 / 14:19)
Всем привет,вообщем вот хотел спросить,есть небольшой код
<?php
Class One {
	public function func_one($value) {
		return $value;
	}
}

$one = new One();

Class Two {
	public function func_two() {
		global $one;
		return $one->func_one('Hi guys');
	}
}

$two = new Two();

echo $two->func_two(); //result Hi guys
?>

Правильно ли я обращаюсь к методу один?нужно ли его вызывать способом global $one или это делается как-то по другому?

2. Александр (24.07.2015 / 15:26)
Лучше как то так
<?php 
Class One { 
    public function func_one($value) { 
        return $value; 
    } 
} 

$one = new One(); 

Class Two { 
    private $one;
    public function __construct($one) {
       $this->one = $one;
    }

    public function func_two() { 
        return $this->one->func_one('Hi guys'); 
    } 
} 

$two = new Two($one); 

echo $two->func_two(); //result Hi guys 
?> 


3. lolpetyaz (24.07.2015 / 16:23)
2. Муз-ТВ, а обязательно нужно его в construct ложить?

4. Александр (24.07.2015 / 17:23)
3. lolpetyaz, Не обязательно, главное не использовать global.

5. lolpetyaz (24.07.2015 / 17:54)
4. Муз-ТВ, тогда покажи как обратится без конструктора и глобала

6. Reflesh (24.07.2015 / 18:11)
5. lolpetyaz,

<?php  
Class One {  
    public function func_one($value) {  
        return $value;  
    }  
}  

$one = new One();  

Class Two {  
    private $one; 

    functuion __construct()
    {
        $this->one = new One;
    }

    public function func_two() {  
        return $this->one->func_one('Hi guys');  
    }  
}  

$two = new Two($one);  

echo $two->func_two(); //result Hi guys  
?> 
Или
<?php  
Class One {  
    public function func_one($value) {  
        return $value;  
    }  
}  

$one = new One();  

Class Two {  
    private $one; 

    public function func_two(One $one) {  
        return $one->func_one('Hi guys');  
    }  
}  

$two = new Two();  

echo $two->func_two($one); //result Hi guys  
?> 
Или
<?php  
Class One {  
    public function func_one($value) {  
        return $value;  
    }  
}  

Class Two extends One{  
    private $one; 

    public function func_two() {  
        return $this->func_one('Hi guys');  
    }  
}  

$two = new Two();  

echo $two->func_two(); //result Hi guys  
?> 
Или
<?php  
Class One {  
    public function func_one($value) {  
        return $value;  
    }  
}  

Class Two extends One{  
    private $one; 

    public function func_two() {  
        return $this->func_one('Hi guys');  
    }

    function __call($name, $arguments) {
        if (!method_exists($this, $name)) {
            $this->one = new One;
            call_user_func_array(array($this->one, $name), $arguments);
        }
    }
}  

$two = new Two();  

echo $two->func_two(); //result Hi guys  
?> 


7. lolpetyaz (24.07.2015 / 18:41)
6. Reflesh, Спасибо большое)

8. Артур (24.07.2015 / 21:07)
Или не заниматься ерундой:
function one($value){
  echo $value;
}

function two(){
  one('Hi guys');
}


9. Антон (24.07.2015 / 22:51)
Велосипедный станок мчится сбивая без оглядки стандарты с ног.

10. Вантуз-мен (24.07.2015 / 23:31)
Наследование и через $this->func_one($val); будет доступен

11. Артур (24.07.2015 / 23:58)
Помнится в одной компании мне дали тест при приеме на работу, в одном из заданий нужно было назвать минимум 10 способов вывода чисел от 1 до 10. Эта тема чем то напоминает то задание )))

12. lolpetyaz (24.07.2015 / 23:59)
10. Vantuz, в том то и дело,что у меня это почему-то не получается,даже щас я попробовал-не!! sad

Добавлено через 01:03 сек.
11. Башка, не в тему ты конечно со своими функциями(

13. Артур (25.07.2015 / 00:01)
12. lolpetyaz, нет автор, это ты не в тему со своим кривым велосипедом.

Для другим участников беседы, вот прекрасный пример того, что случается, когда новички познают азы науки не по книжкам, а по примерам ;)

14. lolpetyaz (25.07.2015 / 00:04)
13. Башка, к чему ты клонишь?что теперь все обязаны писать на процедурке и не учить ооп?

15. Артур (25.07.2015 / 00:08)
14. lolpetyaz, клоню к тому, что тебе нужно почитать книжек по ООП. Думается ты еще ни одну не прочитал, я прав?

16. Вантуз-мен (25.07.2015 / 00:08)
12. lolpetyaz,
<?php

Class One {
    public function func_one($value)
    {
        return $value;
    }
}


Class Two extends One {

    public function func_two()
    {
        return $this->func_one('Hi guys');
    }
}

$two = new Two;
echo $two->func_two();

выводит Hi guys

17. lolpetyaz (25.07.2015 / 00:14)
15. Башка, Господи,я ему об одном ты мне про другое,как относятся твои функции к моему не изучению книг по ооп?

Добавлено через 03:43 сек.
16. Vantuz, мне нужно как-то обойтись без родительского класса(

18. Артур (25.07.2015 / 00:21)
17. lolpetyaz, ну мои функции прекрасно справляются с твоей задачей, да еще и не требуют изучения ООП и прочтения книг. Чем не выход? ) Зачем тебе ООП?

19. lolpetyaz (25.07.2015 / 00:23)
18. Башка, возможно дело в том что я изучаю ооп и мне надо совет в рамках моего вопроса?!

20. Вантуз-мен (25.07.2015 / 00:24)
Че-то я не могу понять задание, не было же условия про родительский класс
сделай тогда так
<?php

Class One {
    public static function func_one($value)
    {
        return $value;
    }
}


Class Two {

    public function func_two()
    {
        return One::func_one('Hi guys');
    }
}

$two = new Two;
echo $two->func_two();



21. Артур (25.07.2015 / 00:26)
20. Vantuz, так и задания то не было )

Добавлено через 00:20 сек.
19. lolpetyaz, мой совет с книгами лучше, поверь.

22. lolpetyaz (25.07.2015 / 00:32)
21. Башка, спасибо,но мне кажется лучше видео уроки)

23. Артур (25.07.2015 / 00:39)
22. lolpetyaz, ну судя по твоим вопросам, не лучше ;) Да и компетенция многих видеоучителей оставляет желать лучшего.

24. lolpetyaz (25.07.2015 / 00:57)
23. Башка, не лучше,а как ты определил мой уровень понимания ооп и количество просмотренных мною роликов,

25. JustZero (25.07.2015 / 21:19)
24. lolpetyaz, вангую что по global $one;

26. lolpetyaz (26.07.2015 / 22:00)
20. Vantuz, тогда как к примеру обратится к массиву?

<?php
$config['lol'] = 'lol';

class Test {
function test() {
return $config['lol'];
}
}

так не сработает,а родительский класс или статик к этому ни как не пречепишь :( 
?>


27. Вантуз-мен (27.07.2015 / 14:33)
26. lolpetyaz, а зачем объявлять переменную вне класса, ну если все же так надо, то необходимо создать метод setConfig($config){} и в нем уже определять внешнюю переменную

ну или что мешает сделать типа так
<?php
class Test {

	public function test2($config) {
		return $config['lol'];
	}
}

$config['lol'] = 'lol';

$test = new Test();
var_dump($test->test2($config));
2 вариант через конструктор в твоем случае конечно метод test и является конструктором

только метод должен быть немного другой
но по идее будет работать new Test($config);

в php7 кстати доступ к конструктору по имени класса больше работать не будет

3 вариант через паттерн Registry

28. lolpetyaz (27.07.2015 / 17:39)
27. Vantuz, тоесть в таких случаях нужно обходится только define?или еще что-то можно использовать по мимо этого?если ты хочешь передать какие-то параметры настроек сайта в класс!

29. Вантуз-мен (27.07.2015 / 17:58)
28. lolpetyaz, я же написал несколько способов
1 через метод setConfig или любой другой который будет принимать внешние параметры или через магический метод __set
2 через конструктор, передача параметров при создании экземпляра класса
3 через паттерн Registry http://omurashov.ru/pattern-registry/

методы класса как и обычные функции могут принимать параметры, чтобы не объявлять global и не создавать констант, передавай данные через параметры метода
пример в предыдущем посте

30. lolpetyaz (27.07.2015 / 18:06)
29. Vantuz, спасибо большое,немного разобрался с этим)

Добавлено через 03:37 сек.
29. Vantuz, а вообще что быстрее работает?обычная функция или класс?и стоит ли использовать ооп если в этом нету потребности?глупый конечно вопрос но все же,просто я видел кучу кода,где ооп действительно используют лишь для того,чтобы показать видители какой я крутой - пишу на ООП,а на самом деле оно там и ненадо!)

31. Вантуз-мен (27.07.2015 / 23:46)
30. lolpetyaz, функциональное конечно быстрее чем ООП, но не всегда удобнее, самый большой минус, функцию нельзя переопределить, а метод класса можно
MVC сам по себе так устроен, что без классов никак, в laravel например почти нет функций, есть там хелперы, но сами по себе они просто упрощают обращение к методам класса

Добавлено через 02:46 сек.
Я по крайней мере сейчас перешёл полностью на ООП, даже какие-то глобальные функции мне удобнее держать в классе

32. lolpetyaz (28.07.2015 / 00:59)
31. Vantuz, ну можно организовать свой паттерн,я видел в кого-то неплохой пример организации структуры сайта и если честно то он не чем не хуже mvc как на меня)

URL: https://visavi.net/topics/42505