Dlaczego w funkcjach i metodach PHP nie jest rozróżniana wielkość liter?


107

Funkcje i metody w PHP nie uwzględniają wielkości liter, jak pokazano w poniższym przykładzie.

function ag()
{
    echo '2';
}

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

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

Ale tak nie jest w przypadku zmiennych. Jakie jest uzasadnienie?


161
PHP nie potrzebuje żadnego śmierdzącego uzasadnienia!
Max Shawabkeh

2
- Ponieważ tak mówi sprzedawca. Bez uzasadnienia, ale odniesienia: php.net/manual/en/functions.user-defined.php (między przykładami 3 i 4), php.net/manual/en/language.variables.basics.php
outis

2
class Share{ share($str){ echo $str; } } $sh = new Share(); $sh->share("string");Możesz być zaskoczony dwoma wywołaniami funkcji share ($ str). pierwszy z powodu c'tor i drugi wyraźne wezwanie z tych samych powodów !!
vivek.m

1
@outis, Co masz na myśli mówiąc „człowiek zupy”?
Pacerier

1
@outis, masz na myśli „Soup Nazi” z Seinfelda. YouTube , Wikipedia
Kevin Traas

Odpowiedzi:


98

Zacytuję z Wywiadu - twórca PHP, Rasmus Lerdorf

Pierwsza wersja PHP była prostym zestawem narzędzi, które stworzyłem na potrzeby mojej strony internetowej i kilku projektów. Jedno narzędzie wykonało fantazyjne logowanie do bazy danych mSQL, inne działało jako interpreter danych formularza. Skończyło się na około 30 różnych małych programach CGI napisanych w C, zanim dostałem dość tego i połączyłem je wszystkie w jedną bibliotekę C. Następnie napisałem bardzo prosty parser, który wybierał tagi z plików HTML i zastępował je danymi wyjściowymi odpowiednich funkcji w bibliotece C.

Prosty parser powoli zaczął zawierać tagi warunkowe, a następnie tagi pętli, funkcje itp. Nigdy nie sądziłem, że piszę język skryptowy. Po prostu dodałem trochę funkcjonalności do parsera zastępującego makra. Wciąż pisałem całą swoją prawdziwą logikę biznesową w C.

Czytałem gdzieś, że ponieważ wszystkie wprowadzone funkcje zasadniczo przypominały znaczniki w dokumencie HTML, a znaczniki HTML nie rozróżniały wielkości liter, wybrał nazwy funkcji w PHP, aby nie rozróżniać wielkości liter. Później ta funkcja pozostała w języku.


66
Pamiętam też cytat z Rasmusa z konferencji PHP w Paryżu, który mówi mniej więcej: „Na pewno nie jestem dobrym programistą, jeśli chodzi o przestrzeganie ścisłych zasad lub standardów kodowania, ale mogę powiedzieć, że jeśli polegasz na rozróżnianiu wielkości liter w rozpoznać nazwę funkcji od innej, masz poważne kłopoty! "
Tom Desp

1
czy w przyszłości nadal będzie rozróżniana wielkość liter?
vee

4
Dlatego programiści php używają podkreślenia zamiast wielkiej litery podczas nazywania swoich funkcji.
Paperstreet7

2
@ paperstreet7 Niektórzy tak. Dobre nie. A przynajmniej już nie.
Dan

13
@dan, wielu „dobrych” programistów używa podkreślników. W rzeczywistości PSR-0 celowo nie udziela rekomendacji. Dobry programista wybiera podkreślenia lub camelcase i trzyma się tej konwencji. Dokonywanie tego wyboru jako miara tego, czy ktoś jest dobrym programistą, jest dość głupie.
jdp

34

Tak, w nazwach funkcji i metod wielkość liter nie jest rozróżniana.

I tak, w nazwach zmiennych rozróżniana jest wielkość liter.

Nie jestem pewien, czy jest ku temu powód - z wyjątkiem tego, że tak było przez długi czas, i tak pozostaje, ze względu na wsteczną kompatybilność.



Jako odniesienie, kilka linków / cytatów do różnych stron podręcznika:

Dla funkcji ( cytowanie ) :

Uwaga: W nazwach funkcji wielkość liter nie jest rozróżniana, chociaż zwykle jest to dobra forma wywoływania funkcji tak, jak pojawiają się w ich deklaracji.

A metody to niewiele więcej niż funkcje w obiektach - zwłaszcza gdy myślimy o PHP 4 i kompatybilności wstecznej.


A dla zmiennych ( cytowanie ):

Zmienne w PHP są reprezentowane przez znak dolara, po którym następuje nazwa zmiennej. W nazwie zmiennej rozróżniana jest wielkość liter.

A właściwości obiektów to niewiele więcej niż zmienne w obiektach - ta sama uwaga o PHP 4 i kompatybilności wstecznej.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.