Я соглашаюсь с Jon Skeet на его потоковом примере. Возможно, это не прекрасно, но это имеет преимущество перед большей частью примеров здесь:
Это реалистично
, Велосипеды, люди или животные, формы или оружие просто не были бы смоделированы наследованием в реальных проектах. (формы, в частности, совершенно опасны, потому что это не работает .)
Это - мой главный объект неприязни с наследованием. Это слишком часто преподается как что-то, что должно использоваться для выражения каждый иерархия, которую можно найти. Сотрудник является человеком, правильно? Таким образом, класс Сотрудника должен наследоваться классу Человека. Но человеком является также LivingCreature, таким образом, у нас должен быть один из тех классов также. И LivingCreature является также Организм, таким образом, там у нас есть другой класс. И Организм.... не стесняются продолжаться.
я думаю, что было бы хорошо, если бы кто-то, где-нибудь, на самом деле преподавал наследование путем объяснения, когда это должно использоваться, и не, как можно захлопнуть его по любой иерархии, выгодно ли это или нет.
Потоки (или устройства как в примере ChrisW) имеют преимущество, которое они делают смысл . Вы хотите смочь рассматривать все потоки то же, подключены ли они к буферу памяти, файлу или сетевому сокету. И все устройства действительно имеют большое поведение вместе, которое могло правдоподобно быть факторизовано в базовый класс Устройства.
Когда люди говорят о глобальных переменных на других языках, это означает нечто иное, чем то, что они делают в PHP. Это потому, что переменные не на самом деле глобальные в PHP. Объем типичной программы PHP - один HTTP-запрос. Переменные сеанса на самом деле имеют более широкую область действия, чем «глобальные» переменные PHP, потому что они обычно охватывают множество HTTP-запросов.
Часто (всегда?) Вы можете вызывать функции-члены в таких методах, как preg_replace_callback ()
следующим образом:
preg_replace_callback('!pattern!', array($obj, 'method'), $str);
См. обратные вызовы для получения дополнительной информации.
Дело в том, что объекты были привязаны к PHP и в некотором смысле приводят к некоторой неловкости.
Не беспокойтесь чрезмерно о применении стандартов или конструкций из разные языки к PHP.
При неправильном использовании глобальные переменные могут затруднить поиск проблем. Допустим, вы запрашиваете скрипт php и получаете предупреждение о том, что вы пытаетесь получить доступ к индексу массива, который не существует в какой-либо функции.
Если массив, к которому вы пытаетесь получить доступ, является локальным для функции, вы проверяете функцию, чтобы увидеть, не допустили ли вы там ошибки. Это может быть проблема с вводом в функцию, поэтому вы проверяете места, где функция вызывается.
Но если этот массив является глобальным, вам нужно проверить все места, где вы используете эту глобальную переменную, и не только это, вы должны выяснить, в каком порядке осуществляется доступ к этим ссылкам на глобальную переменную.
Если у вас есть глобальная переменная в фрагменте кода, поэтому трудно изолировать функциональность этого кода. Почему вы хотите изолировать функциональность? Так что вы можете протестировать его и повторно использовать в другом месте. Если у вас есть код, который не нужно тестировать и не нужно повторно использовать, тогда можно использовать глобальные переменные.
вы должны выяснить, в каком порядке осуществляется доступ к этим ссылкам на глобальную переменную.Если у вас есть глобальная переменная в фрагменте кода, это затрудняет изолирование функциональности этого кода. Почему вы хотите изолировать функциональность? Так что вы можете протестировать его и повторно использовать в другом месте. Если у вас есть код, который не нужно тестировать и не нужно повторно использовать, тогда можно использовать глобальные переменные.
вы должны выяснить, в каком порядке осуществляется доступ к этим ссылкам на глобальную переменную.Если у вас есть глобальная переменная в фрагменте кода, это затрудняет изолирование функциональности этого кода. Почему вы хотите изолировать функциональность? Так что вы можете протестировать его и повторно использовать в другом месте. Если у вас есть код, который не нужно тестировать и не нужно повторно использовать, тогда можно использовать глобальные переменные.
Я согласен с Клетусом. я бы добавил две вещи:
с наилучшими пожеланиями , дон