Вопросы каждый хороший разработчик PHP должны смочь ответить [закрытый]

75
задан 4 revs, 3 users 63% 23 May 2017 в 12:25
поделиться

16 ответов

По общему признанию, я украл этот вопрос откуда-то еще (не могу вспомнить, где я все больше читал), но думал, что это было забавно:

Q: Что такое T_PAAMAYIM_NEKUDOTAYIM ?
A: Его оператор разрешения объема (Двойная толстая кишка)

Опытный php'er сразу знает, что это значит. Менее опытные (а не ивритские) разработчики могут захотеть прочитать это .

Но сейчас более серьезные вопросы:


Q: Какова причина этого предупреждения: «Предупреждение: не может изменять информацию об изменении заголовка - заголовки уже отправленные», и какая хорошая практика, чтобы предотвратить это?
A: Причина: Данные тела были отправлены, вызывая отправку заголовков тоже.
Профилактика: Обязательно выполните код в заголовке, прежде чем выводить какие-либо данные тела. Убедитесь, что вы случайно не отправили пробелы или любые другие персонажи.


Q: Что не так с этим запросом: «Выбрать * из таблицы, где ID = $ _POST [« ID »]« ?
A: 1. Это вулкавим для инъекций SQL. Никогда не используйте ввод пользователя непосредственно в запросах. Сначала дезинфицировать его. Прекраичное использование подготовленных утверждений ( PDO ) 2. Не выбирайте все столбцы (*), но укажите каждый столбец. Это преимущественно для предотвращения памяти запросов, когда в будущем добавляется столбец BLOB в будущем.


Q: Что не так с этим, если утверждение: , если (! Strpos ($ HayStack, $ иглы) ... ?
A: respos Возвращает Индексное положение того, где он сначала обнаружил, что $ игла, которая может быть 0 . С 0 также разрешается false Решением является использование строгого сравнения: Если (false! == strpos ($ Haystack, $ иглы) ...


Q: Что является предпочтительным способом написать это, если оператор, и почему?
, если (5 == $ quotear) или , если ($ quotevar == 5)
A: Первый, как оно предотвращает случайное назначение от 5 до $, когда вы забыли использовать 2 Equalsigns ( $ quotvar = 5 ), и приведет к ошибке, последний не будет.


Q: Учитывая этот код:

function doSomething( &$arg )
{
    $return = $arg;
    $arg += 1;
    return $return;
}

$a = 3;
$b = doSomething( $a );

... Каково значение $ A и $ B После вызова функции и почему?
A: $ A 4 и $ B 3 . Первый, потому что $ arg пропускается Ference, последнее, потому что возвращаемое значение функции представляет собой копию (не ссылаться на) начальное значение аргумента.


ОЧАС

Q: В чем разница между общественным , защищена и частным в определении класса?
: Public делает классный элемент, доступный для «всех», защищен , делает элемент класса, доступный только для сама и полученных классов, частных делает только доступный элемент к самому классу.


Вопрос: Что не так с этим кодом:

class SomeClass
{
    protected $_someMember;

    public function __construct()
    {
        $this->_someMember = 1;
    }

    public static function getSomethingStatic()
    {
        return $this->_someMember * 5; // here's the catch
    }
}

A: Статические методы не имеют доступа к этому $, поскольку статические методы могут быть выполнены без создания класса.


Q: В чем разница между интерфейсом и абстрактным классом?
A: Интерфейс определяет контракт между классом реализации, и объектом, который вызывает интерфейс. Абстрактный класс предварительно определяет определенное поведение для классов, которые расширяют его. В определенной степени это также можно считать договором, поскольку он может существовать определенные методы.


Q: Что не так с классами, которые преимущественно определяют Getter и Deventers, эта карта прямо к своим внутренним членам, не имея методов, которые выполняют поведение?
A: Это может быть кодовый запах Поскольку объект действует как неоднозначный массив, без особых других применений.


Q: Почему внедрение PHP используют интерфейсы Sub-оптимальной?
A: PHP не позволяет вам определить ожидаемый тип возврата метода, который по существу делает интерфейсы довольно бесполезный. :-P

50
ответ дан 24 November 2019 в 11:33
поделиться

Как лучше всего избегать ввода данных пользователем? (Кажется, этот вопрос часто возникает)

-121--847611-

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

-121--2991165-

Почему вы никогда не должны выводить пользовательский ввод напрямую!

Печать данных непосредственно из GET может привести к появлению уязвимостей межсайтового сценария (XSS) . Поэтому сначала необходимо отправить входные данные от клиента через htmlspecialchars ().

3
ответ дан 24 November 2019 в 11:33
поделиться

Terry Chay имеет блог пост в основном суммирование того, каково каждый разработчик PHP должен знать и / или, как ожидается, ответит на некоторую степень в собеседовании.

http://terrychay.com/article/php-coders.shtml

Я думаю, что это отличное резюме.

5
ответ дан 24 November 2019 в 11:33
поделиться

Оставайтесь вдали от MFC и его библиотека обмена сообщениями.
На самом деле, если вы видите MFC и потоки, приходящие к вам - запустите для холмов (*)

(*), если, конечно, если MFC исходит с холмов - в этом случае убегают от холмов.

-121--1017742-

Когда сайт разработан с использованием PHP, и это полное дерьмо, это:

A) Неисправность PHP

b) Неисправность программистов

7
ответ дан 24 November 2019 в 11:33
поделиться

Я думаю, что хороший вопрос: Как работает HTTP? Работа с Get и Post данные Среди других HTTP Communications присуждается разработкой PHP. Понимание того, как HTTP работает в более широком контексте и как PHP реализует это далеко.

11
ответ дан 24 November 2019 в 11:33
поделиться

«Почему вы не используете что-то еще?»

Извините, кто-то должен был сказать :) [)

14
ответ дан 24 November 2019 в 11:33
поделиться

Я бы спросил что-то вроде:

а) как насчет кэширования?

b) Как можно организовать кэш?

C) Вы уверены, что вы не делаете дополнительные вопросы DB? (В моих первых вещах я сделал на PHP, это была MySQL_Query внутри Foreach, чтобы получить имена пользователей, которые сделали комментарии ... ужасно :))

d) Почему регистрация_глубали зла?

E) Почему И как вы должны разделить вид от кода?

f) Какова главная цель «реализация»?

Вот вопросы, которые вообще не были ясны для меня после того, как я прочитал некоторые основные книги. Я обнаружил все о инъекциях и CSX, Strpos через несколько дней \ недель через тысячи часто задаваемых вопросов FAQ в Интернете. Но пока я не нашел ответов на эти вопросы, мой код был действительно ужасен :)

4
ответ дан 24 November 2019 в 11:33
поделиться

«Какой твой любимый отладчик?»
«Какой твой любимый профилировщик?»

Фактическое приложение / IDE / Frestend не имеет значения, если выходит за рамки «Блокнот, эхо и микротрие ()». Он настолько вряд ли вы нанимаете один в миллиарде разработчика, который все время пишет идеальный код, и его / ее единицы тесты заметили все ошибки и узкие места, прежде чем они даже произойдут, что вы хотите, чтобы кто-то, кто может профилировать и / или выйти через код и найти ошибки в конечном времени. (Это правда для, вероятно, все языки / платформы, но кажется немного слаборазвитым навыкам среди разработчиков PHP для меня, чисто субъективных говорящих)

5
ответ дан 24 November 2019 в 11:33
поделиться

для f в «tree -fi | grep foo»; do sed -i -e 's/foo/bar/g' $ f; done

-121--4407630-

Как обстоит дело с паро? http://www.parosproxy.org/functions.shtml

-121--2485543-

В чем разница между = = и = = = и зачем вообще использовать = = =?

9
ответ дан 24 November 2019 в 11:33
поделиться

Окончательно вопросы безопасности!

(Простые ответы в этом посте, конечно, закрепление веб-приложений PHP намного более сложнее)

  • Как бороться с инъекцией SQL?

MySQL_REAL_ESCAPE_STRING () для начала с MySQL. Затем попробуйте изучить PDO, чтобы воспользоваться преимуществами подготовленных утверждений и переносимости через поставщики баз данных.

  • Как справиться с CSRF (подделка для перекрестного сайта)?

Добавьте токен на каждый важный запрос на безопасность важных операций (пользователь, должно быть, видел форму перед отправкой важной заявки).?

  • Как Deal XSS (скрипты по перекрестному сайту) отражены и сохранены?

HTMLEntities () хорош для начала.

  • Вариант инъекций XXX: впрыск LDAP, инъекция XPath, и т. Д. ...?

Вам необходимо знать, каковы «словарный запас», используемый XXX, а затем вычтете то, что вам нужно для демонстрации и / или и-отвержение ».

  • Каков список разумных функций?

функции, которые интерпретируют PHP-код (возможно, включенный в удаленный файл) или которые выполняют команду в вашей системе. Короткий и неполный список может быть: Exec (), Passthru (), System (), POPEN (), EVAL (), preg_replace () ...

  • Как иметь дело с опасностями включения файлов?
  • Что такое Трансверсальный путь?
  • Каковы риски, связанные с загрузкой файлов?

Нужна тщательная проверка параметров, используемых при открытии файла или удаленных ресурсов.

  • Как обеспечить настройку конфигурации вашей конфигурации PHP (I.E. Вы знаете, какое использование php.ini)?

Это будет долго, поэтому я пропускаю ответ, пожалуйста, прочитайте руководство PHP.

  • Об фильтрации пользовательских данных: какая разница между дезинфекцией и и Проверка ?

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

24
ответ дан 24 November 2019 в 11:33
поделиться

Что не так с следующим кодом?

$a = 2;
function foo()
{
    $a = 3;
}
foo();
echo $a;
1
ответ дан 24 November 2019 в 11:33
поделиться
  • При вызове элемента «Имя» в размере $ Array, которое является правильным?:

    • $ Array [Имя]
    • $ Array [«Имя»]

    Оба часто будут работать, но только цитируют форму правильно. Определите («имя», 0); и посмотрите, как ошибки летают. Я видел этого слишком много.

  • Как вы можете отправить элементы формы формы в качестве массива?

    Добавьте пустые кронштейны на атрибут имени: несколько <Тип ввода = «Флажок» Name = «Флажки []» /> будет преобразован в массив на сервере (например, $ _ post [«флажки] [0..N] ). Я не думаю, что это на 100% PHP-специфический PHP, но он уверен, что ударает зацикливаться через $ _ Post для каждого возможного «Флажок». $ I элемент.

  • mysql_, mysqli_ или pdo?

    Здесь только один действительно неправильный ответ: библиотека mysql_ не делает подготовленные утверждения и больше не может оправдать свою емкость для зла. Называть функцию, как ожидается, будет называться несколько раз за выполненный запрос, « MySQL_REAL_ESCAPE_STRING () », - просто соль в ране.

6
ответ дан 24 November 2019 в 11:33
поделиться

Какова лучшая практика экранирования пользовательского ввода? (Этот вопрос, кажется, часто возникает)

.
6
ответ дан 24 November 2019 в 11:33
поделиться

- это кросс-браузер PHP?

(Я знаю, это сделает смех многих людей, но более-заданный вопрос на форумах PHP!)

12
ответ дан 24 November 2019 в 11:33
поделиться

Никто его еще не трогал, но это то, о чем каждый PHP-разработчик должен иметь возможность подробно рассказать: Почему register_globals плохо?

8
ответ дан 24 November 2019 в 11:33
поделиться

Объясните разницу между

extract()

explode()

implode()

2
ответ дан 24 November 2019 в 11:33
поделиться
Другие вопросы по тегам:

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