Щоправда, я вкрав це питання звідкись ще (не пам’ятаю, де я його вже читав), але вважав це смішним:
Q: Що таке T_PAAMAYIM_NEKUDOTAYIM?
В: Оператор роздільної здатності (подвійне двокрап’я)
Досвідчений PHP'er відразу знає, що це означає. Менш досвідчені (і не єврейські) розробники можуть захотіти прочитати це .
Але більш серйозні питання зараз:
З: Що є причиною цього попередження: «Попередження: Не вдається змінити інформацію заголовка - заголовки вже надіслані», і яка хороша практика для запобігання цьому?
В: Причина: дані тіла були надіслані, що спричинило надсилання заголовків.
Запобігання. Перш ніж виводити будь-які дані тіла, спочатку виконайте певний код заголовка. Переконайтеся, що ви випадково не розіслали пробіли чи будь-які інші символи.
З: Що неправильно з цим запитом "SELECT * FROM table WHERE id = $_POST[ 'id' ]":?
В: 1. Це вразливо для введення SQL. Ніколи не використовуйте введення даних користувача безпосередньо у запитах. Спочатку продезінфікуйте. Переважно використовувати підготовлені твердження ( PDO ) 2. Не виділяйте всі стовпці (*), а вказуйте кожен окремий стовпець. Це головним чином для запобігання запитам, що призводять до збільшення пам’яті, коли, наприклад, у певний момент додається стовпець BLOB.
З: Що поганого в цьому, якщо твердження if( !strpos( $haystack, $needle ) ...:?
A: strpos повертає індексну позицію місця, де він вперше знайшов $ голку, яка могла б бути 0. Оскільки 0також вирішує falseрішення полягає у використанні суворого порівняння:if( false !== strpos( $haystack, $needle )...
З: Який найкращий спосіб написати це твердження if, і чому?
if( 5 == $someVar )або if( $someVar == 5 )
A: Перший, оскільки він запобігає випадковому присвоєнню 5 до $ someVar, коли ви забудете використовувати 2 рівнознаки ( $someVar = 5), і спричинить помилку, другий - ні.
Q: Враховуючи цей код:
function doSomething( &$arg )
{
$return = $arg;
$arg += 1;
return $return;
}
$a = 3;
$b = doSomething( $a );
... яке значення $aі $bпісля виклику функції і чому?
В: $a є 4і $bє 3. Перший, оскільки $ arg передається за посиланням, другий, оскільки повернене значення функції є копією (а не посиланням на) початкового значення аргументу.
ООП специфічний
Питання: В чому різниця між public, protectedі privateу визначенні класу?
В: public робить учасника класу доступним для всіх, protectedробить учасника класу доступним лише для себе та похідних класів, privateробить учасника класу доступним лише для самого класу.
З: Що не так із цим кодом:
class SomeClass
{
protected $_someMember;
public function __construct()
{
$this->_someMember = 1;
}
public static function getSomethingStatic()
{
return $this->_someMember * 5;
}
}
В: Статичні методи не мають доступу до $ this, оскільки статичні методи можна виконувати без створення класу.
З: У чому різниця між інтерфейсом та абстрактним класом?
В: Інтерфейс визначає контракт між реалізовуючим класом і об'єктом, який викликає інтерфейс. Абстрактний клас заздалегідь визначає певну поведінку класів, які його розширюватимуть. До певної міри це також можна вважати контрактом, оскільки він гарантує існування певних методів.
З: Що поганого в класах, які переважно визначають геттери та сетери, які відображають прямо до своїх внутрішніх членів, фактично не маючи методів, які виконують поведінку?
В: Це може бути запах коду, оскільки об’єкт діє як облагороджений масив без особливого використання.
З: Чому реалізація PHP використання інтерфейсів неоптимальна?
В: PHP не дозволяє визначити очікуваний тип повернення методу, що по суті робить інтерфейси досить марними. :-P