2011-03-14 10 views

Odpowiedz

21

No, youcan't. Dzięki Bogu.

+2

Może to być całkiem przydatne, dla przykładowe spojrzenie na kontrolery szyn – Alexcp

+1

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

+0

@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_"; –

1

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 !

16

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.

Edit stycznia 2016

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

+2

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

+0

[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

+0

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

0

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); 
    } 
} 
Powiązane problemy