вызов другого метода 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, в том то и дело,что у меня это почему-то не получается,даже щас я попробовал-не!!
Добавлено через 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