Каковы некоторые полезные Идиомы PHP?

см. этот пример для двоичной классификации.

 43 model = L.Classifier(
 44     MLP(44, 1), lossfun=F.sigmoid_cross_entropy, accfun=F.binary_accuracy)

подача lossfun=F.sigmoid_cross_entropy в L.Classifier является хорошим решением.

10
задан Jason Plank 1 November 2011 в 16:08
поделиться

9 ответов

В конечном счете Вы получите все возможное от PHP сначала путем изучения обычно хороших практик программирования, прежде, чем сфокусироваться на чем-либо PHP-определенном. Сказав это...


Подайте заявку подробно для забавы и прибыли:

  1. Итераторы в циклах foreach. Почти никогда нет неправильного времени.

  2. Дизайн вокруг автозагрузки класса. Использовать spl_autoload_register(), нет __autoload(). Для бонусных очков имейте его, сканируют дерево каталогов рекурсивно, затем не стесняйтесь реорганизовывать свои классы в более логическую структуру каталогов.

  3. Typehint везде. Используйте утверждения для скаляров.

    function f(SomeClass $x, array $y, $z) {
        assert(is_bool($z))
    }
    
  4. Произведите что-то другое, чем HTML.

    header('Content-type: text/xml'); // or text/css, application/pdf, or...
    
  5. Учитесь использовать исключения. Запишите обработчик ошибок, который преобразовывает ошибки в исключения.

  6. Замените Ваш define() глобальные константы с константами класса.

  7. Замените свои метки времени Unix надлежащим Date класс.

  8. В долгих функциях, unset() переменные, когда Вы сделаны с ними.


Использование с виновным удовольствием:

  1. Цикл по элементам данных объекта как массив. Чувствуйте себя виновными, что они не объявляются частные. Это не некоторый языческий язык как Python или Lisp.

  2. Используйте буферы вывода для сборки длинных строк.

    ob_start();
    echo "whatever\n";
    debug_print_backtrace();
    $s = ob_get_clean();
    

Избегайте, если не абсолютно необходимо, и вероятно даже затем, если Вы действительно не ненавидите программистов обслуживания и Вас:

  1. Волшебные методы (__get, __set, __call)

  2. extract()

  3. Структурированные массивы - используют объект

13
ответ дан 3 December 2019 в 13:24
поделиться

К счастью, пространства имен находятся в 5,3 и 6. Я настоятельно рекомендовал бы против использования идиомы Path_To_ClassName. Это делает грязный код, и Вы никогда не можете изменять свою структуру библиотеки... никогда.

Автозагрузка SPL является большой. Если Вы организованы, это может сохранить Вас, типичный блок с 20 строками включает и требует наверху каждого файла. Можно также менять вещи в библиотеке кода, и целый PHP может включать из тех каталогов, ничто не повреждается.

Сделайте свободное использование === ==. Например:

if (array_search('needle',$array) == false) {
  // it's not there, i think...
}

даст ложное отрицание, если 'игла' будет в ключевом нуле. Вместо этого:

if (array_search('needle',$array) === false) {
  // it's not there!
}

всегда будет точно.

5
ответ дан 3 December 2019 в 13:24
поделиться

Посмотрите этот вопрос: Скрытые Функции PHP. Это имеет много действительно полезных подсказок PHP, лучшая из которых пузырились до верхней части списка.

5
ответ дан 3 December 2019 в 13:24
поделиться

Существует несколько вещей, которые я делаю в PHP, которые имеют тенденцию быть PHP-конкретными.

  1. Соберите строки с массивом.

    Большая обработка строк является дорогой в PHP, таким образом, я склонен писать алгоритмы, которые сокращают дискретное количество обработок строк, которые я делаю. Классический пример создает строку с циклом. Запустите с массива (), вместо этого, и действительно выстройте конкатенацию в цикле. Затем интегрируйте () его в конце. (Это также аккуратно решает проблему запятой запаздывания.)

  2. Константы массива являются остротой для реализации именованных параметров к функциям.

4
ответ дан 3 December 2019 в 13:24
поделиться

Мой опыт с PHP преподавал мне несколько вещей. Назвать некоторых:

  • Всегда ошибки на выходе. Это первые две строки моего типичного проекта (в режиме разработки):
ini_set('display_errors', '1');
error_reporting(E_ALL);
  • Никогда не используйте автоволшебство. Материал как автозагрузка может укусить Вас в будущем.

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

  • Использовать if(isset($array[$key])) вместо if($array[$key]). Второе повысит предупреждение, если ключ не будет определен.

  • При определении переменных (даже с for циклы), дают им подробные имена ($listIndex вместо $j)

  • Комментарий, комментарий, комментарий. Если конкретный отрывок кода не кажется очевидным, оставляет комментарий. Позже Вы, возможно, должны были бы рассмотреть его и не могли бы помнить то, что это - цель.

Кроме этого, класса, функциональные и переменные соглашения о присвоении имен ваше дело и Ваша команда. В последнее время я использовал соглашения о присвоении имен Платформы Зенда, потому что они чувствуют себя хорошо мне.

Кроме того, и когда в режиме разработки, я установил обработчик ошибок, который произведет ошибочную страницу в малейшей ошибке (даже предупреждения), давая мне полный след.

10
ответ дан 3 December 2019 в 13:24
поделиться

Я разрабатывал с PHP (и MySQL) в течение прошлых 5 лет. Последний раз я начал использовать платформу (Пехлеви) с солидной библиотекой JavaScript (Dojo), и это изменило способ, которым я работаю навсегда (хорошим способом, я думаю).

Вещью, которая заставила меня думать об этом, был Ваш первый маркер: платформа Зенда делает точно это, поскольку это - стандартный способ получить доступ к 'контроллерам' и 'действиям'.

С точки зрения инкапсуляции и абстракции проблем с различными базами данных, Zend_Db это очень хорошо. Dojo делает превосходное задание сглаживания несоответствий JavaScript между различными браузерами.

В целом, стоит войти в хорошие методы ООП и использовать (и ЧИТАТЬ О!) платформы был очень практический способ добраться для понимания проблем ООП.

Для некоторых автономных инструментов, которые стоит использовать, см. также:

Присяжный острослов (движок шаблонов) ADODB (абстракция доступа к базе данных)

3
ответ дан 3 December 2019 в 13:24
поделиться
  1. Включите УВЕДОМЛЕНИЕ, и если Вы действительно хотите к СТРОГОМУ сообщению об ошибке. Это предотвращает много запаха кода и ошибок: ini_set('display_errors', 1); error_reporting(E_ALL && $_STRICT);
  2. Держитесь подальше от глобальных переменных
  3. Сохраните как можно больше функций коротким. Это читает легче, и легко поддержать. Некоторые люди говорят, что необходимо смочь видеть целую функцию на экране, или, по крайней мере, что начало и заканчивает фигурные скобки циклов, и структуры в функции должны оба быть на экране
  4. Не доверяйте вводу данных пользователем!
4
ответ дан 3 December 2019 в 13:24
поделиться

Объявите переменные перед использованием их!

3
ответ дан 3 December 2019 в 13:24
поделиться

Узнайте различные типы и === оператор, это важно для некоторых функций как strpos() и Вы начнете использовать return false самостоятельно.

3
ответ дан 3 December 2019 в 13:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: