Czy w funkcjach PHP rozróżniana jest wielkość liter?

100

Przekopałem się przez jakiś kod i znalazłem kilka telefonów mySQL_fetch_array. Czy w nazwach funkcji w PHP rozróżniana jest wielkość liter? Pamiętam, że gdzieś to czytałem, ale nie mogę znaleźć żadnego odniesienia do tego.

Ben Dauphinee
źródło
1
Nie, nie wydaje się. preferencje są zwykle pisane małymi literami
Jason
3
Duplikat stackoverflow.com/questions/2749781/… . Nie, w funkcjach
wielkość
Dla porównania: jest tu zakopany pośrodku php.net/manual/en/functions.user-defined.php w bloku Note :.
mario
3
Głosuję za pozostawieniem tego otwartego - tytuł jest znacznie bardziej ogólny i wyraźny, więc prawdopodobnie pomoże większej liczbie osób.
coreyward

Odpowiedzi:

100

Cytuję z tego :

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.

Wygląda więc na to, że w funkcjach zdefiniowanych przez użytkownika nie jest rozróżniana wielkość liter. Głosowano za tym, aby w funkcjach / obiektach PHP5 rozróżniać wielkość liter.

SIFE
źródło
3
PHP5 już wyszło, jedyną nadzieją jest PHP6 i nie sądzę, by zrobili ten krok. Zepsułoby się to zbyt wiele, aby uzyskać niewielki zysk.
Mark Tomlin
3
@Mark Tomlin Nie zgadzam się. Najlepszą praktyką jest zachowanie tego samego przypadku, co podręcznik, więc powinien on niewiele się zepsuć, jednocześnie zwiększając przejrzystość.
Ben Dauphinee
12
łał. to smutne. chociaż ImAgEcReAtEfRoMpNg () jest dobrym sposobem na zaciemnianie kodu ...
Pontomedon
8
Skoro cytat mówi „bez rozróżniania wielkości liter”, dlaczego mówisz „Więc wygląda na to, że wartość zdefiniowana przez użytkownika jest rozróżniana”? Jeśli to pomyłka, naprawdę powinieneś to naprawić.
Barmar
11
Łał! Miło jest się tego dowiedzieć po 7 latach kodowania!
Daan
34

Nie.

Funkcje PHP nie uwzględniają wielkości liter.

mpen
źródło
19

TL; DR: w nazwach klas wielkość liter nie jest rozróżniana, ale zawsze używaj tej samej wielkości, co w deklaracji (tak samo jak w przypadku funkcji). Ponadto tworzenie instancji klas z różnymi wielkościami liter, tak jak zostały zdefiniowane, może powodować problemy z autoloaderami.


W nazwach klas wielkość liter nie jest rozróżniana:

<?php
class SomeThing {
  public $x = 'foo';
}

$a = new SomeThing();
$b = new something();
$c = new sOmEtHING();
var_dump($a, $b, $c);

To daje:

class SomeThing#1 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#2 (1) {
  public $x =>
  string(3) "foo"
}
class SomeThing#3 (1) {
  public $x =>
  string(3) "foo"
}

Problem polega na używaniu autoloaderów i systemów plików z rozróżnianiem wielkości liter (takich jak ext2 / 3/4), w którym musisz wywołać nazwę klasy w tym samym przypadku, gdy nazwany jest plik zawierający klasę (a nie jak nazwa klasy jest faktycznie pisana wielkością liter), lub użyj strtolower:

Plik klasy:

<?php
// filename something.php
class SomeThing {
   ...
}

Funkcja autoloadera ( __autoloadlub funkcja do rejestracji spl_autoload_register)

function my_autloader($className) {
  $filename = CLASSES_DIR . DIRECTORY_SEPARATOR . $className . '.php';
  if (file_exists($filename)) {
    require($filename);
  }
}

Teraz z tym kodem:

$a = new something(); // works
$b = new SomeThing(); // does not work
$c = new SOMETHING(); // does not work

Możesz sprawić, że to zadziała (tj. Efektywnie nie rozróżniając wielkości liter w nazwach klas za pomocą autoloadera), jeśli dodałeś wywołanie do strtolower()w kodzie autoloadera, ale tak jak w przypadku funkcji, lepiej jest odwoływać się do klasy w ten sam sposób, w jaki jest zadeklarowana, mieć nazwę pliku z taką samą wielkością jak nazwa klasy, używać autoloaderów i zapomnieć o używaniu strtoloweri lubianych.

Carlos Campderrós
źródło
7

Nie, wielkość liter nie jest rozróżniana, jednak dla zachowania spójności należy zawsze używać wielkości liter podanych w instrukcji.

Jednak zmienne małe litery.

Alex
źródło
3

W PHP zmienne rozróżniają wielkość liter, ale funkcje nie mają takiego problemu. Możesz użyć następujących instrukcji do wyświetlania danych wyjściowych, wszystkie pokażą ten sam wynik.

<?php
Echo "This is a test script";
ECHO "This is a test script";
echo "This is a test script";
?>

Z drugiej strony, jeśli zmienisz wrażliwość zmiennych na wielkość liter, to pokaże błąd.

Przykład:

<?php
$a=5;
echo $A;// It will show the error.
?>

Wynik:

Notice: Undefined variable: A in C:\xampp\htdocs\test.php on line 3
atif
źródło
2

W nazwach metod również wielkość liter nie jest rozróżniana. na przykład:-

<?php
       class C { 

           public function method() { } 

           public function METHOD() { } 
       }

wynik:

PHP Fatal error:  Cannot redeclare C::METHOD() in ....php on line 6
Habeeb Perwad
źródło
1

Podsumowując odpowiedź wszystkich. Mimo że PHP nie wymaga spójności wielkości liter we wszystkich wystąpieniach, nawet do tej pory w PHP5.

Najlepsza praktyka będzie

zawsze używaj tych samych przypadków, gdy odwołujesz się do zmiennych („obowiązkowe”) lub funkcji („opcjonalnych, ale zalecane).

Nigdy nie wiesz, że może któregoś dnia głosowanie się zakończy i uratujesz cały koszmar zmieniających się przypadków w twoich aplikacjach wykonanych kilka lat temu, które wymagają aktualizacji w PHP.

Mam nadzieję, że i tak pomoże.

projekt weia
źródło
Re „uratuj cały koszmar zmieniających się przypadków”: Nie, rozumiem, że jeśli zmiana kiedykolwiek zostanie dokonana, uwzględnianie wielkości liter byłoby opcją ustawioną w php.ini. Zachowuje w ten sposób kompatybilność wsteczną.
ToolmakerSteve
-2

Może to już za późno, ale ...

Każdy już tu wiedział: silnik PHP nie dba o wielkość liter.

I jest głosowanie na bugtrackerze PHP, gdzie większość mówi: „Tak, jestem zwolennikiem rozpoznawania wielkości liter”.

Ale jestem przeciwna, ponieważ w moim frameworku MVC wywołuję akcję kontrolera:

    $currentController = new $controller($parameters);
    $currentAction = $currentController->{$action}();

Kontrolery $ controller i $ action są pobierane z adresu URL bez zmian.

Pomyśl, jeśli użytkownik opublikuje link do mojej witryny: https: // my-site / MyPartnerController / MyPartnerGallery

podczas gdy klasa nosi nazwę myPartnerController ...

Oznacza to, że nikt nigdy nie uzyska tej strony, jeśli nazwy klas i funkcji PHP uwzględniają wielkość liter.

Tak, zawsze używam wszystkich nazw w kodzie zgodnie z deklaracją. Ale modlę się, aby nigdy nie rozróżniali wielkości liter w nazwach funkcji i klas.

Dziękuję Ci!

Vsevolod Azovsky
źródło
1
to naprawdę źle ... gdybym poszedł do my-site / myLogInPage / loginsuccess i odgadł kilka rzeczy , jak nazwałeś swoją funkcję sukcesu logowania, byłbym w stanie lub mógł usunąć kilka rzeczy ...
Tschallacka