Czy magiczne metody są najlepszą praktyką w PHP? [zamknięte]

Czy magiczne metody są najlepszą praktyką w PHP?

Author: OM The Eternity, 2010-04-23

4 answers

Nie sądzę, aby magiczne metody były najlepszą lub najgorszą praktyką: w zależności od tego, co chcesz osiągnąć, możesz ich używać lub nie... Chodzi mi o to, że nie musisz dostosowywać kodu, jak to możliwe, aby z nich korzystać, ale jeśli musisz, nie ma żadnego problemu.

Jeśli masz obiekt z 3 i tylko 3 atrybutami, nie musisz używać magicznych setterów/getterów, ale w niektórych zaawansowanych przypadkach są one świetnym sposobem na wykonywanie bardzo złożonych rzeczy (Systemy ORM itp...)

Może niektóre z nich są Nie wiem, ale większość z nich nie jest.

 22
Author: maid450,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-23 12:03:23

Cons

  1. Wyszukiwanie tekstu nie znajduje funkcji

  2. System jest trudniejszy do zrozumienia , szczególnie dla początkujących

  3. Narzędzia Refaktoryzacyjne mogą częściej zawodzić

Ogólnie rzecz biorąc, magiczne metody robią rzeczy za kulisami i programista może nie zdawać sobie sprawy, że to się dzieje, co utrudnia debugowanie.

Podczas wyszukiwania funkcji (lub innych symboli) nie można znaleźć wszystkich dopasowania usunięcie starego kodu staje się koszmarem, a ten strach może spowodować, że martwy kod będzie gromadzić się w bazie kodowej. Jeśli martwy kod zostanie usunięty, może spowodować pęknięcie w nieznanych miejscach.

 40
Author: Heikki Naski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-27 11:13:30

Chociaż niektóre z tych magicznych funkcji są zalecane przez Google:]}

Unikaj pisania naiwnych seterów i getterów

Podczas pisania klas w PHP, możesz zaoszczędzić czas i przyspieszyć swoje skryptów poprzez bezpośrednią pracę z właściwościami obiektu, a nie pisanie naiwnych seterów i geterów. W poniższym przykładzie pies Klasa używa metod setName() i getName() do uzyskania dostępu do nazwy własność.

class dog {
  public $name = '';

  public function setName($name) {
    $this->name = $name;
  }

  public function getName() {
    return $this->name;
  }
}

Zauważ, że setName () i getName () nie robi nic poza przechowywaniem i zwraca odpowiednio właściwość name.

$rover = new dog();
$rover->setName('rover');
echo $rover->getName();

Ustawienie i wywołanie właściwości name bezpośrednio można uruchomić Do 100% szybszy, a także skraca czas rozwoju.

$rover = new dog();
$rover->name = 'rover';
echo $rover->name;

Oryginalny link: http://code.google.com/speed/articles/optimizing-php.html

Wersja zarchiwizowana: https://web.archive.org/web/20120208060457/http://code.google.com/speed/articles/optimizing-php.html

W każdym razie, te metody mogą nie być wydajne, ale nie są w ogóle przestarzałe.

 7
Author: Rolf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-01 15:38:57

Nie wydaje mi się. Mój IDE nie jest w stanie pokazać mi "podpowiedzi" dla magicznego settera i getterów. Chociaż kod jest czasami trudniejszy do debugowania.

Wolę ich nie używać, lepiej generować potrzebne metody (jak wiele setterów i getterów) przez moje ide.

 3
Author: opHASnoNAME,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-25 10:27:01