Вы не должны использовать 4 пробелов на своей второй условной строке. Возможно, используйте:
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
кроме того, не забывайте, что пробел более гибок, чем Вы могли бы думать:
if (
cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'
):
do_something
if (cond1 == 'val1' and cond2 == 'val2' and
cond3 == 'val3' and cond4 == 'val4'):
do_something
Оба из тех довольно ужасны все же.
, Возможно, теряют скобки (, Руководство по стилю препятствует этому хотя)?
if cond1 == 'val1' and cond2 == 'val2' and \
cond3 == 'val3' and cond4 == 'val4':
do_something
Это, по крайней мере, дает Вам некоторое дифференцирование.
Или даже:
if cond1 == 'val1' and cond2 == 'val2' and \
cond3 == 'val3' and \
cond4 == 'val4':
do_something
я думаю, что предпочитаю:
if cond1 == 'val1' and \
cond2 == 'val2' and \
cond3 == 'val3' and \
cond4 == 'val4':
do_something
Вот Руководство по стилю , который (с 2010) рекомендует использовать скобки.
По поводу этого вопроса (Аннотация и интерфейс) вы можете прочитать сообщение « Миграция библиотек и фреймворков ООП на PHP 5.3 » в блоге Мэтью Вейера О'Финни - это о Zend Framework и о том, как они могут решить эту проблему в версии 2.0.
Одна из вещей, которую они отмечают:
В других языках ООП, таких как Python, C #, интерфейсы обозначаются префикс интерфейса с заглавной буквы 'Я'; в приведенном выше примере мы бы тогда есть Zend :: View :: IView.
Итак, в вашем примере у вас будет что-то вроде этого, я думаю:
namespace Framework\Package\Subpackage;
abstract class ASubpackage {}
Framework/Package/Subpackage/ASubpackage.php
namespace Framework\Package\Subpackage;
interface ISubpackage {}
Framework/Package/Subpackage/ISubpackage.php
Что вы думаете об этом? (Я не тестировал этот способ, но это не похоже на плохую идею?)
Я лично рекомендую избегать любого использования венгерской нотации и подумайте о следующих стандарт Java для имен интерфейсов; то есть они называются описательно, как и любой другой класс. См. этот вопрос SO для обсуждения тонкостей венгерской нотации.
Хороший пример использования общих описательных имен, указывающих на функциональность или поведение, можно найти в собственном SPL PHP, например: " Счетный »,« Итератор »,« ArrayObject ».
Честно говоря, я считаю, что венгерская нотация была введена с C #, потому что нет ключевых слов «extends» и «Implements», как в Java. Поэтому, чтобы различать, соглашение стало называть его IView. В Java интерфейс будет называться только View, а реализации будут называться DefaultViewImpl, SmartyViewImpl или что-то в этом роде. Поскольку PHP действительно расширяет и реализует ключевые слова, имеет смысл использовать соглашение Java. Я слышал аргумент, что венгерская нотация позволяет сделать элементы API идентифицируемыми, просто глядя на имена классов. В этом случае я бы назвал его IView или AbstractView.
На мой взгляд, лучший способ решить эту проблему, просто добавив Class к своим именам классов.
namespace Framework\Package\Subpackage;
abstract class AbstractClass {}
Framework/Package/Subpackage/AbstractClass.php
namespace Framework\Package\Subpackage;
interface InterfaceClass {}
Framework/Package/Subpackage/InterfaceClass.php
обратите внимание, что это все еще не идеально (однако работает отлично), но я сохраняю код, похожий на исходную идею;)