[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Интересное PHP. Просто погудеть.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Ron
Цитата (Эли4ка @ 9.03.2018 - 20:08)
Вообще я жду когда в PHP появятся конструкции friend

Из C++ что ли? Зачем? Такое нарушает половину GRASP-овских принципов, если задуматься.

Я вот очень сильно жду перегрузку функций и методов. Не переопределение, как сейчас, а перегрузку, что совсем разные вещи. Понимаю, можно закостылить через __call() с ветвлением, но этж фу. biggrin.gif

Цитата (Эли4ка @ 9.03.2018 - 19:56)
Какой заголовок будет у первого файла, если в него инклюдится второй. blink.gif

Как тест назывался? "Shit code debug skills"?

Эли4ка
Цитата
Второй заголовок заменит первый ( имена case insensitive), он и отправится.

Michael, а где-то можно об этом прочитать? Просто честно с этим не сталкивалась ни разу
Цитата
Как тест назывался? "Shit code debug skills"?

Назывался очень оригинально-Какой ты PHP программист. Походу я никакой программист biggrin.gif
Цитата
Из C++ что ли? Зачем? Такое нарушает половину GRASP-овских принципов, если задуматься.

А почему бы и нет?
GRASP? Даже на оф. сайте не встречала этого термина. Это он о чем?
Цитата
Я вот очень сильно жду перегрузку функций и методов. Не переопределение, как сейчас, а перегрузку, что совсем разные вещи. Понимаю, можно закостылить через __call() с ветвлением, но этж фу.

Разве freiend, operator для перегрузки не подойдут?
Эли4ка
GRASP нашла ответ на этом форуме. twin писал
Michael
Цитата (acerrusm @ 9.03.2018 - 16:09)
Эли4ка, вот хорошая книга.

Цитата (Эли4ка @ 9.03.2018 - 17:56)
acerrusm, спасибо

У тебя ж она есть laugh.gif


_____________
There never was a struggle in the soul of a good man that was not hard
Michael
Цитата (Эли4ка @ 10.03.2018 - 03:06)
Michael, а где-то можно об этом прочитать? Просто честно с этим не сталкивалась ни разу

в доках

_____________
There never was a struggle in the soul of a good man that was not hard
Ron
Цитата (Эли4ка @ 10.03.2018 - 05:06)
GRASP? Даже на оф. сайте не встречала этого термина. Это он о чем?

GRASP относится к принципам объектно-ориентированного программирования, точно так же как и SOLID. Они не имеют привязки к какому-то конкретному языку.

Цитата (Эли4ка @ 10.03.2018 - 05:06)

Разве freiend, operator для перегрузки не подойдут?

Насколько мне известно с помощью friend объявляются классы и функции, которые могут получить доступ к приватным свойствам класса, в котором они указаны (как friend). Само по себе напрямую ковыряться в чужих свойствах, тем более приватных, никуда не годится (опять же с позиции ООП). Зачем? Первое что мы нарушим даже при самом грамотном подходе, грасповский принцип Information Expert.

operator служит для перегрузки операторов (внезапно). То есть, если в терминах PHP, то картина могла бы быть:

$objA = new ObjA();
$objB = new ObjB();
...

$objA + $objB;


Классно, только что этот перегруженный "+" означает в контексте именно данных объектов иди разберись. Надо открыть текст класса, посмотреть как перегружен, запомнить и держать в голове. Теперь представим, что в каждой группе классов, оператор "+" перегружен по разному и имеет совершенно различное поведение. Наступает кромешный ад! Слышал, в уважаемых конторах за перегрузку операторов отрывают различные органы. Как и за макросы, кстати.

всяко
Существует неофициальное соглашение, что перегрузка операторов уместна в случае, если она несет математический смысл. Например, сложение двух векторов, которые могут быть представлены структурами данных, или объектами. Тогда, в переводе на PHP:
$objVectorС = $objVectorA + $objVectorB;

имеет совершенно определенный смысл и не вызывает у прогрессивной части населения никакого бугурта. =)

Не лишним сказать С++ требует от программиста чрезвычайной самодисциплины, потому что в нем есть инструменты с помощью которых можно создать ад по структуре и запутанности код. Над которым сам спустя пару лет будешь плакать горькими слезами. Это к тому, что инструменты уместные в С++, который предполагает профессионалов, могут ужасающим образом сказаться для PHP, думаю по понятным причинам.


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

function foo(int $a)
{
... do something ...
}

function foo(string $a)
{
... do something else ...
}


Таким образом при вызовe foo(1) и foo('zap') имеем разное поведение. Тоже самое с разными типами объектов в параметрах.

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.