Чому функції та методи PHP не залежать від регістру?


107

Функції та методи в PHP не залежать від регістру, як показано в наступному прикладі.

function ag()
{
    echo '2';
}

Ag();
class test {
    function clMe()
    {
        echo 'hi';
    }
}

$instance = new test;
$instance->clme();

Але це не так зі змінними. Яке обґрунтування?


161
PHP не потребує жодного смердючого обґрунтування!
Макс Шавабке

2
- Тому що так каже чоловік-суп. Не обґрунтування, а посилання: php.net/manual/en/functions.user-defined.php (між прикладами 3 та 4), php.net/manual/en/language.variables.basics.php
outis

2
class Share{ share($str){ echo $str; } } $sh = new Share(); $sh->share("string");Ви можете бути здивовані, побачивши два дзвінки для функціонування спільного доступу ($ str). перший через c'tor і другий явний дзвінок з тих же причин !!
vivek.m

1
@outis, Що ти маєш на увазі під "суп-чоловіком"?
Pacerier

1
@outis, ти маєш на увазі "Суп-нацист" із Сейнфельда. YouTube , Вікіпедія
Кевін Траас

Відповіді:


98

Дозвольте мені цитувати з інтерв'ю - Творця PHP, Расмуса Лердорфа

Перша версія PHP - це простий набір інструментів, який я зібрав для свого веб-сайту та для декількох проектів. Один інструмент здійснив фантастичну реєстрацію звернень до бази даних mSQL, інший виступав інтерпретатором даних форм. Я закінчив приблизно 30 різних програм CGI, написаних на C, перш ніж я захворів від цього, і об'єднав їх у єдину бібліотеку C. Потім я написав дуже простий аналізатор, який вибирав би теги з HTML-файлів і заміняв їх висновком відповідних функцій у бібліотеці С.

Простий синтаксичний аналізатор повільно зростав, включаючи умовні теги, потім теги циклу, функції тощо. Ні в який момент я не думав, що пишу мову сценаріїв. Я просто додав трохи функціональності в аналізатор заміни макросів. Я все-таки писав всю свою справжню ділову логіку в С

Я десь читав, що оскільки всі введені функції по суті відчували себе тегами в документі HTML і оскільки теги HTML були нечутливими до регістру, він вибрав назви функцій у PHP, щоб вони були нечутливими до регістру. Пізніше ця особливість залишилася в мові.


66
Я також пам’ятаю цитату Расмуса на конференції PHP в Парижі, яка сказала більш-менш: «Я, безумовно, не хороший програміст, з точки зору дотримання строгих правил кодування або стандартів, але можу сказати, що якщо ви покладаєтесь на чутливість до справи розпізнайте одне ім’я функції від іншого, ви переживаєте серйозні проблеми! "
Том Депп

1
це все-таки нечутливе до випадків у майбутньому?
vee

4
Ось чому програмісти php використовують підкреслення замість верблюда під час іменування своїх функцій.
paperstreet7

2
@ paperstreet7 Деякі так і роблять. Хороші ні. Принаймні, вже не.
Ден

13
@dan, багато "хороших" програмістів використовують підкреслення. Насправді, PSR-0 навмисно не дає рекомендацій. Хороший програміст підбирає підкреслення або верблюд і дотримується цієї конвенції. Зробити цей вибір мірою того, чи є хтось хорошим програмістом, досить нерозумно.
jdp

34

Так, імена функцій та методів не залежать від регістру.

І так, імена змінних залежать від регістру.

Я не впевнений, що в цьому є причина - за винятком того, що це вже давно, і, таким чином, залишається так, з відсталих причин сумісності.



В якості довідки, кілька посилань / цитат на різні сторінки посібника:

Для функцій ( цитування ) :

Примітка: Імена функцій нечутливі до регістру, хоча це зазвичай хороша форма для виклику функцій так, як вони відображаються в їх декларації.

І методи не набагато більше, ніж функції в об'єктах - особливо коли ми думаємо про PHP 4 та зворотній сумісності.


І для змінних ( цитування ):

Змінні в PHP представлені знаком долара, а потім іменем змінної. Ім'я змінної залежить від регістру.

А властивості об'єкта не набагато більше, ніж змінних в об'єктах - те саме зауваження про PHP 4 та зворотну сумісність.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.