2010-10-21 2 views
6

Я изучаю php, просто закрывая его.Есть ли «правильный» способ использования php?

Я надеялся, что кто-то может указать мне в правильном направлении в отношении безопасности, потока и общих лучших практик?

Спасибо.

edit--

Я полагаю, лучший способ для выражения того, что я пытаюсь спросить .. Что является лучшей практикой:
1.) при обработке формы с PHP, получить против поста, $ _REQUEST против $ _GET & $ _POST
2.), когда динамически создает HTML-файлы (пример ниже)
3.) Входов & аутентификации в том же файле, что и форма создателя
4.) Отправка электронной почты с PHP

С # 2 выше

<?php 
echo "<h1> Welcome </h1>"; 

if ($_SESSION['type'] == "admin") 
{ 
//lots of html in the echo statment 
echo "tables and admin interface here"; 
} else 
{ 
//lots of html in the echo statment 
echo "tables and user dashboard here"; 
} 
?> 

--VS-- 


<h1> Welcome </h1> 

<?php 
if ($_SESSION['type'] == "admin") 
{ 
?> 
lots of html in the echo statment  
tables and admin interface here 
<?php 
} else 
{ 
?> 
lots of html in the echo statment  
ables and user dashboard here  
<?php 
} 
?> 

--VS-- 

<?php if($_SESSION['username']): ?> 

<p>You are logged in as <?=$_SESSION['username']?></p> 

<p><a href="?logout=1">Logout</a></p> 

<?php endif; ?> 

пс: Спасибо всем, кто уже откликнулся. Могу ли я также узнать, где подходит рамка? Я взял класс в ООП, и мы не познакомились с какими-либо рамками.

Я читал много о каркасах Symfony и zend, но я все еще смущен.

еще раз спасибо.

+7

№;) (ну, вы спросили :)) –

+3

Только после слов «Не использовать». –

+2

PHP получает много горя, только некоторые из которых он заслуживает. Тем не менее, он широко используется и легко развертывается, поэтому вы можете получить от него много полезного. – SingleNegationElimination

ответ

7

РНР сообщество действительно никогда не был силен в предлагая какие-либо руководящие принципы развития и пропаганды передового опыта. В предраковые дни типичный PHP-код, написанный большинством разработчиков, был очень дилетантским и дезорганизованным - см. Исходный код Wordpress. Но PHP - хороший язык для веб-приложений. Это было сделано для Интернета, и вы можете написать хороший профессиональный код, если хотите. Это модно, чтобы разогнать его, но не обращайте внимания на это.

В любом случае, как и другие, вы сказали, что лучше всего использовать фреймворк. Будучи новичком, вам будет важно выбрать структуру, которая хорошо документирована и имеет сильное сообщество, которое поможет вам преодолеть горб. Вот мое краткое изложение основных структур php:

  • Kohana => хороший, но плохо документированный со слабым сообществом. пропусти это.
  • Zend => самый популярный фреймворк для php w/good docs, но другой плохой исполнитель, поскольку он переусердствовал с объектами и шаблонами, пытаясь быть чрезмерно предприимчивым.
  • Торт & Symfony => являются фреймворками 1-го поколения, а также имеют репутацию для плохой работы. Я бы пропустил оба. Новая версия Symfony работает, но не готова.
  • Литиевый => передний край новой структуры во главе с одним из разработчиков Cake. используя php 5.3, и утверждает, что это быстро. НО, а не в v.1 еще & также имеют плохие документы в этой точке =>http://li3.me.

Codeigniter => популярные, быстрые, хорошие документы и сообщества. очень легко учиться. v2.0 официально не был выпущен, но готов к использованию в производстве и является только php5. Вы можете использовать ту же документацию, которая находится на сайте CI для v1.7. Версии очень похожи, кроме, наконец, поддержки 2.0pp php 4. здесь скачать для 2.0: http://bitbucket.org/ellislab/codeigniter/

YII => Действительно набирает обороты, несмотря на то, что это глупое имя. Это быстрый исполнитель с большой документацией и множеством функций. Также выходит новая книга. Сообщество так себе, но растет. Эта структура imo берет много от рельсов. Там есть веб-код инструмент генерации и он использует активную запись. http://yiiframework.com/

вы можете создавать приложения намного быстрее с YII из-за кода и активной записи, но это будет немного сложнее, чем CI. Вы можете обнаружить, что это становится на вашем пути немного больше, поскольку вы пытаетесь сделать все, как YII. CI более гибкий - дает вам основу, в которой вы нуждаетесь, или не получаете на своем пути. Так что теперь я бы рекомендовал codeigniter.

удачи!

+2

Прошу прощения, но это выглядит как плагин для меня. Что еще более важно, «пренебрегайте этим материалом» - так вы говорите, игнорируете какой-либо отрицательный момент для языка? Это ужасно недальновидная философия. Хороший программист понимает свои инструменты и ограничения своих инструментов и использует правильный инструмент для работы. –

+1

@Billy ONeal, ты - тролль. – staticsan

+1

@Billy ONeal - Не вилка. Я бы порекомендовал CI любому php noob, я бы рекомендовал python всем, кто ищет первый язык для изучения. Комментарий «пренебрежение» с моей стороны не очень хорошо сказался. Я не ссылался на какие-либо конкретные советы, а скорее на полное избиение php языковыми пуристами. Несмотря на недостатки, вы можете написать профессиональный код корпоративного уровня с PHP, если вы знаете, как это сделать. Это не очень похоже на Ruby, но это отличный инструмент для webdev и прагматичных людей. – johnW

6

Используйте свободно доступные рамки, такие как:

  • Zend Framework
  • CakePHP
  • CodeIgniter (см комментарии)
  • Кохана (Из @Alex's answer)

и следовать стандартам указанных в этой структуре.

+2

Не смотрите на CI, если вы еще не хотите знать, как правильно писать код в PHP4: P – alex

+0

@alex: Я пытаюсь не писать субъективный ответ, просто перечисляя фреймворки. Листинг * single * framework приглашает пламенные войны. –

+0

@Billy ONeal Конечно, просто sayin ' – alex

5

Посмотрите на авторитетное программное обеспечение с открытым исходным кодом, известное хорошим кодом.

Посмотрите на Kohana's source или у любого другого пользователя от Billy ONeal's answer.

Я бы не рекомендовал использовать источник CI в качестве руководства - так как я считаю, что он по-прежнему поддерживает PHP4, поэтому некоторые из кода будут бесполезны для изучения - если вы не планируете писать код PHP4, что является плохой идеей, если вы только сейчас учатся.

Не смотрите на WordPress, вы получите некоторые ужасные привычки.

Кроме того, хотя я думаю об этом, узнайте об OO и о различии с процедурным кодом.

+0

+1. Вы имеете в виду, что страшнее, чем PHP? * Билл дрожит * –

+0

Как насчет кода Drupal? – TechplexEngineer

+0

@TechplexEngineer: зависит. Существующие версии Drupal для доставки по-прежнему составляют тонну PHP4. Я верю, что их версия для skunk-works - это PHP5. –

10

Хорошее программирование не имеет отношения к языку. Я предлагаю вам начать изучение концепций разработки программного обеспечения, таких как объектно-ориентированное программирование, шаблоны проектирования, разделение проблем, повторное использование, инкапсуляция, тестирование и рефакторинг. Начните с любого из них и держите «заглушку» в списке, и вы поправляетесь.

PHP специфический - узнать принятый стандарт кодирования, такой как PEAR или Zend. После того, как вы усвоили некоторые из концепций, возьмите хорошую ссылку, такую ​​как одна из главных фреймворков, упомянутых в других ответах: Zend Framework, CakePHP, Symfony и другие.

+0

Правда, но это не совсем специфично для PHP. PHP делает это сложным, потому что ** по умолчанию ** поведение смешивает реализацию и интерфейс. Вот почему я рекомендую структуру здесь, потому что она отделяет это. –

+0

@Billy ONeal, я не согласен с тем, что это поведение по умолчанию. Даже без рамки, исследование понятий, о которых упоминал Эран Гальперин, научит вас не смешивать реализацию и интерфейс. – bmb

+0

@bmb: поведение по умолчанию PHP занимает простой HTML (интерфейс) и добавляет '' сегменты, содержащие реализацию, в том же файле или логическом модуле. Да, есть способы, чтобы предотвратить выполнение PHP, но это то, что оно по-умолчанию, по умолчанию, поведение. –

3

Чтобы обеспечить что-то иное, чем «использовать фреймворк» или «посмотреть на структуру», вот краткие правила PHP-специфики, которые я нашел, имеют большое значение.

  1. Используйте PDO и отрисуйте его в класс (или используйте существующий класс). Не используйте mysql_query или такие функции.
  2. Логика перед выходом. Не делайте такие вещи, как <?php if($x) { ?> HTML here <?php } ?> (с помощью синтаксиса HEREDOC очень важно это делать).
  3. Используйте магический метод __autoload ограничить включает

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

+0

+1 - обратите внимание, что # 2 становится менее важным с некоторыми фреймворками, где вы используете PHP в качестве языка шаблона в представлении. На самом деле, в качестве языка шаблонов, PHP довольно хорош (учитывая, что именно он был разработан в первую очередь). –

+1

Ссылаясь на 2: вам часто нужно делать это в представлении. Хотя '$ x' обычно является результатом чего-то, вычисленного на не презентационном уровне. – alex

+1

@Billy ONeal - Да, и я думаю, что это на самом деле один из лучших аргументов в пользу использования фреймворка, хотя я по-прежнему считаю, что разработчикам PHP достаточно хорошо писать код с PHP вне рамки. –

4

Почему все атакуют php? Многие прекрасные сайты убегают. По крайней мере, пока они не станут достаточно большими, чтобы заслужить капитальный ремонт.

99% Интернета просто выбрасывает сайты, которые не получают большого трафика, по сравнению с сайтами, такими как facebook или amazon, поэтому почему они должны изучать язык более сложный, стабильный или строгий, если php получает работа выполнена экономически эффективным способом, который не менее стабилен или безопасен для того, что необходимо?

Большинство сайтов, которые я построю, убегают от Коханы - ветки от codeigniter. Оба они полезны. Кого волнует, если CI использует php4. Что делать, если вас нанял веб-фирма с архаичными сайтами? Угадайте, что - вам нужно знать php4. Эта жалоба похожа на то, что вам больше не нужно знать, что вы предлагали html ... пока вам не придется разрабатывать и кодировать шаблон информационного бюллетеня для какой-либо крупной компании. И что? Крушить курс с поиском в Google?

Я говорю, что ПРАВОЙ способ использования PHP - следовать примерам. Да, Wordpress имеет некоторые ужасные привычки, но он работает и является лишь одной из самых успешных платформ. О чем тебе это говорит?

Я бы сказал, что вы могли бы многому научиться из рамок, таких как Кохана, и даже CI, поскольку оба имеют достойные методы защиты, которые не сложно выполнить. Такие вещи, как сбой базы данных и фильтрация xss. Это привнесет вас в программирование OO, если вы не знакомы, и у обоих есть достойная база пользователей, чтобы вы не застряли без ответов.

Не позволяйте этим ребятам пугать вас. для начинающих PHP - хороший ход. В конце концов, что-то вроде Java или объектива C будет более полезным для рабочих мест и приложений, но узнайте его, когда вы туда доберетесь.

+1

Kohana начался как ветка от CI, но теперь это полная переписывание. Говоря, что вам, возможно, потребуется знать, что PHP4 в будущем не дает достаточных оснований для изучения его как новичка. Я могу получить приложение Ruby, значит ли это, что я должен его изучить сейчас? Популярность Wordpress не имеет ничего общего с качеством его кода. Также * XSS Filtering * дает неправильное представление - вы не должны пытаться фильтровать, просто кодировать на основе контекста. – alex

+0

Просто потому, что есть хорошие вещи, написанные в нем, это не делает его хорошим языком. Напротив, часто эти вещи являются хорошими идеями, реализуемыми бедными или не программистами. И что касается «менее безопасного», вы, очевидно, не прочитали 90% фрагментов кода в комментариях в документах PHP: P –

+0

О, и «правильный» ответ: «НИКОГДА **», чтобы «следовать» Примеры".Я видел более ужасно плохой код для копирования/вставки, потому что человек, пишущий его, ничего не знал о том, что делает код, чем любой другой код, который у меня когда-либо был, для destroy. –

0

Во-первых, Вы должны прочитать инструкцию PHP, то смотрите с открытым исходным кодом

+0

-1: Ничто в руководстве по PHP ничего не говорит о лучших практиках. Он научит вас языку, но не как эффективно его использовать. –

+0

php manual говорит что-то о php – Sam

4

В PHP можно хорошо кодировать. Вероятно, лучший ресурс, который я видел, насколько это возможно в StackOverflow: просмотрите вопросы, помеченные как PHP.

В частности, нет порядка, некоторые конкретные вещи, чтобы помочь вам на вашем пути от моих лет программирования на PHP:

  • Включение уведомлений и затем убедитесь, что вы не пишете код, который запускает их. Установка по умолчанию PHP не Включает уведомления, что отлично подходит для производственной среды, но плохо для среды разработки. К сожалению, их файл по умолчанию php.ini, похоже, не знает, для чего он является примером.

  • Аналогичным образом убедитесь, что у вас есть magic_quotes и register_globals оба выключены. Они оба предназначены для более простых и наивных времен программирования и сегодня создают больше проблем, чем они решают.

  • Инициализация переменных перед их использованием. Это также означает элементы массива. Если ваш код не уверен, существует ли переменная или элемент, используйте isset() и array_key_exists().

  • Выбирайте или развивайте разумный стиль кодирования и придерживайтесь его. Вам не нужно быть экономным с пробелами или разрывами строк.

  • Проверьте переменные, которые вы ищете, чтобы быть там. Это сложно. Отличным примером этого является обработка HTTP POST, которая может содержать много переменных элементов. Выясните, какой должен быть в $_POST и искать его. Не предполагайте, что то, что представлено, всегда будет тем, что должно быть представлено.

  • Вдоль тех же строк проверьте правильность значений, а не неправильные значения. Если вам нужна переменная, чтобы иметь действительное значение, посмотрите, что представляет собой действительное значение, прежде чем продолжить, а не то, что может быть недопустимым значением для выброса. Например, если вам нужна переменная, представляющая собой целое число, тогда проверьте, что это целое число, не проверяйте нулевую строку, поскольку нулевая строка - это не единственное недопустимое значение!

  • Отдельный доступ к базе данных, логика и презентация (это часто называют программированием Model-View-Controller). Другим способом для этого является то, что вы не должны коммиксировать код, который обрабатывает последний запрос POST с разметкой HTML, испускаемой SQL-запросами. Большинство фреймворков обеспечит это.

  • Если вы не используете фреймворк, который предоставляет слой Object, вы будете катавать свой собственный SQL. Используйте либо готовые инструкции, либо используйте собственную функцию кавычек для строк, а не addslashes().

  • В PHP 4 было очень легко использовать большую память, потому что структуры были скопированы, а не указаны. PHP 5 в значительной степени решает эту специфическую проблему, но она все равно может произойти со строками. Это также не затрагивает тенденцию некоторых API-интерфейсов к созданию больших структур.

+1

+1 для единственного ответа, относящегося к конкретным языковым функциям. –

+1

Да, это действительно самый логичный ответ. Хотел бы я подумать, чтобы сказать это вместо того, чтобы извергать какую-то напыщенность. –

Смежные вопросы