Chciałbym utworzyć funkcję o nazwie "nowy" i klasy o nazwie "case".Czy mogę używać zastrzeżonych nazw PHP dla moich funkcji i klas?
Czy mogę to zrobić w PHP?
Chciałbym utworzyć funkcję o nazwie "nowy" i klasy o nazwie "case".Czy mogę używać zastrzeżonych nazw PHP dla moich funkcji i klas?
Czy mogę to zrobić w PHP?
Może to być całkiem przydatne, dla przykładowe spojrzenie na kontrolery szyn – Alexcp
@Alexcp: Może się przydać, jeśli Twoim celem jest zmodyfikowanie kodu, pomylenie wszystkich znaczników składni i doprowadzenie do szaleństwa innych deweloperów. –
@Alexcp: Chciałem to zrobić w CodeIgniter, naśladując moje kontrolery Rails. Zadzwoniłem do moich metod kontrolnych new_() i routed */new do moich metod new(): $ route ['([A-Za-z _.-] +)/(new)'] = "$ 1/new_"; –
Domyślnie nie jest to możliwe, są zarezerwowanymi słowami i nie można z nich korzystać.
http://www.php.net/manual/en/reserved.keywords.php
Może można skompilować PHP lub coś takiego, aby osiągnąć swój cel, ale myślę, że (jak innych ludzi, że połączenie zostało odebrane), że nie jest to dobry pomysł :)
HTH !
Nie można tego zrobić, alternatywną opcją jest po prostu użyć _case() lub _new() jako nazwy funkcji
Sprawdź również:
Faktycznie, przy definiowaniu taka metoda będzie skutkowała powstaniem błędu parsowania, używając go nie ma, co pozwala jakieś obejścia:
class A {
function __call($method, $args) {
if ($method == 'new') {
// ...
}
}
}
$a = new A;
$a->new(); // works!
powiązanej feature request z 2004 roku jest nadal otwarty.
Od PHP 7 jest obecnie możliwe aby wymienić swoje metody za pomocą słów kluczowych, które zostały ograniczone do tej pory, dzięki Context Sensitive Lexer:
class Foo {
public function new() {}
public function list() {}
public function foreach() {}
}
nadal można” t, jednak, nazwij swoją klasę Case
Obawiam się.
Wszyscy wiemy, co doktor * obecnie * mówi, jednak dyskusje są zawsze włączone, i nie wszyscy ludzie są tak zjadliwi, jak ty na ten temat. Faktem jest, że istnieje obecnie dość niespójność między wywołaniem błędu analizy, gdy metoda jest zdefiniowana z zastrzeżonym słowem kluczowym, podczas gdy użycie tej nazwy metody nie powoduje żadnego błędu. W związku z tym korzystanie z zarezerwowanych słów kluczowych może być w przyszłości bardzo dozwolone, ponieważ kontekst, w którym są używane, pozwala odróżnić je od ich pierwotnego znaczenia, z punktu widzenia parsera. – Benjamin
[email protected] nawet dostarczył łatkę jako dowód koncepcji (patrz link w mojej odpowiedzi) i podaje argument, dlaczego obecne zachowanie może czasami być problematyczne: "w miarę wprowadzania nowych słów zastrzeżonych zderzenie z nazwami metod istniejących klas ". Nie mówię, że to jest droga, ale uważam, że dobrze jest zachować otwarty umysł. – Benjamin
Tak, mogą być dozwolone w przyszłości. Podobnie mogą one nigdy nie być dozwolone w przyszłości. Może to w przyszłości spowodować błąd analizy. "Zachowanie otwartego umysłu" wymaga przygotowania się na "wiele scenariuszy", co oznacza podążanie za wskazówkami języka najlepiej jak potrafisz. –
Wzdłuż linii co Benjamin wspomniano, jest interesującym zastosowaniem „klon”, (która jest zarezerwowana) w tym class, linia 545
public function __call($method, $args)
{
if ('clone' == $method) {
return call_user_func_array(array($this, 'cloneRepository'), $args);
} else {
$class = get_called_class();
$message = "Call to undefined method $class::$method()";
throw new \BadMethodCallException($message);
}
}
Dlaczego chcesz mylić się? – BoltClock
Zrób sobie przysługę i nie rób tego. –
Proszę, tylko nie. –