2016-05-09 13 views
19

Aktualnie migrowałem swoją witrynę z PHP5 do PHP7 i zacząłem używać ścisłej funkcji pisania, która została dodana. Jednak to wymaga ode mnie, aby rozpocząć wszystkie pliki z następującej linii:Włączenie "strict_types" globalnie w PHP 7

<?php declare(strict_types=1); 

// All other code here 
// ... 

więc zastanawiałem się, czy jest jakiś sposób, aby umożliwić strict_types globalnie za pomocą czegoś podobnego php.ini lub plik konfiguracyjny apache więc nie muszę pisać ten wiersz za każdym razem, a jeśli tak, w jaki sposób mogę to włączyć?

+2

Nie, nie jest to możliwe. –

+3

Możesz włączyć strict_types na całym świecie, używając 'sed',' awk' lub innego wybranego przez ciebie narzędzia do zamiany wszystkich ' NikiC

+0

@NikiC I ' m dość pewny prosty find-zamień w każdym IDE zrobiłby to samo, właśnie zastanawiałem się czy to było możliwe by zrobić to w runtime jak standardowa funkcja jak nie mogłem znaleźć niczego o tym – Paradoxis

Odpowiedz

19

To nie jest celowo możliwe, ponieważ realizacja przyjętej po niezwykle długiej dyskusji z skalarnych podpowiedzi typu było to jedno: https://wiki.php.net/rfc/scalar_type_hints_v5

To wyraźnie daje wybór sposobu skalarne typy są sprawdzane do rozmówcy którejkolwiek funkcji, a nie jej autor, tak że:

  • jeśli piszesz biblioteki z podpowiedzi typu skalarnego, swoje funkcje gwarantowane są typy parametrów wymagane, nawet jeśli nazywa się kodem nie jest napisane w trybie ścisłym (typy są zmuszane zamiast)
  • jeśli piszesz bibliotekę i chcesz tradycyjnego słabego pisania, nadal możesz korzystać z bibliotek, które używają podpowiedzi typu (ponieważ nie zmuszają cię do ścisłego sprawdzania typu)
  • przeciwnie, jeśli piszesz bibliotekę i chcesz ścisłe wpisywanie dla funkcji, które nazywasz, nie musisz wymagać, aby użytkownicy Twojej biblioteki również włączali ścisłe wpisywanie funkcji w taki sam sposób jak te zdefiniowane przez użytkownika, a istniejący kod jest taki sam przez domyślnie
  • Jeśli włączysz ścisłe pisanie, musisz zmienić kod, aby mimo to prawidłowo go obsługiwać.

To od Ciebie zależy więc, aby powiedzieć PHP, które pliki zostały napisane w trybie ścisłym, a które nie; a sposobem na to jest użycie instrukcji declare.

1

Zasadniczo nie.

Ponieważ jeśli potrzebujesz tylko bibliotek, które używały trybu ścisłego, spowodujesz niepotrzebne rozdzielenie paczek. Weź również pod uwagę opcję typu strict/weak, która jest po prostu ekstra w PHP.