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.


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.


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.


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.


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 są małe litery.


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

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

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.


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!


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
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.