Două chestii învățate în ultima vreme (în PHP)

Două chestii învățate în ultima vreme (în PHP)

În ultima săptămână am învățat două lucruri utile:

Error Catching

De la Andrei am învățat o chestie foarte tare: în PHP poți avea diverse clase pentru tratarea erorilor într-un bloc try/catch. Asta o știam, e ok. Ce nu știam însă este că… poți avea mai multe blocuri catch! Altfel spus, poți avea try/catch/catch/catch :D 

try {
    $current = $api->current($q);
} catch (InternalServerErrorException $e) {
    die($e->getMessage());
} catch (ErrorException $e) {
    die($e->getMessage());
} catch (ApixuException $e) {
    die($e->getMessage());
}

Frumos, nu?

Magic methods

Eu până acum am folosit foarte puțin (spre deloc) metodele magice în PHP: __get și __set niciodată, singura de care am făcut uz (și abuz, ar putea spune unii!) este __call. Eh, iar la proiectul curent încercam să fac un Model foarte basic, în care să țin și să uniformizez datele:


class Model
{
  protected $attributes = [
    'foo',
    'bar'
  ];

  public function __construct($attributes = [])
  {
    $this->fill($attributes);
  }

  protected function fill($attributes)
  {
    $validAttributes = array_intersect_key($attributes, $this->attributes);
    $this->attributes = array_merge($this->attributes, $validAttributes);
  }

  public function __get($prop)
  {
    return $this->attributes[$prop] ?? null;
  }

  public function __set($prop, $value)
  {
    if (array_key_exists($prop, $this->attributes)) {
      $this->attributes[$prop] = $value;
    }
  }

  public function toArray()
  {
    return $this->attributes;
  }
}

Urmând să-l folosesc așa:


$model = new Model([ 'foo' => true, 'bar' => false ])

Problema întâlnită a fost: de ce isset($model->foo) returnează false?

Ei bine, aparent este nevoie de încă o metodă magică: __isset!


  public function __isset($prop){
    return isset($this->attributes[$prop]);
  }

12 Comentarii

Gigel Anonimu' a scris

Hei Iamntz, apropos de limbaje…in special cele de scripting.
Nu te-a batut gandul sa inveti Python?
Am vazut din posturi anterioare ca ai Js in toolset (si io il am) care e si el un limbaj de scripting dar oarecum mai clunky/quirky. Python pare mai curat decat Js – dar se merita oare investitia de timp in a invata un limbaj nou sau e mai bine sa-ti imbunatatesti limbajul actual de scripting – Js?

Intreb ptr. ca pe mine ma bate gandul dar inca n-am cantarit toate argumentele pro/contra.

Ce crezi?

Ionuț Staicu a scris

@Gigel Anonimu’: Pragmatic vorbind, nu am nevoie de alte limbaje de programare în afară de JS/PHP pentru muncă.

Cu toate astea, dacă ești dornic de învățat și experimentat, sigur, orice limbaj merge. Eu am început cu Python acum câțiva ani, pe coursera. Nu aș putea spune că-i un limbaj dificil de învățat, cel puțin bazele.

Acum, dacă merită sau nu… îți dai seama că depinde ce faci. Dacă faci web dev (frontend, UI), probabil JS e o alegere mai bună decât python :)

Gigel Anonimu' a scris

@Ionuț Staicu:
” Nu aș putea spune că-i un limbaj dificil de învățat, cel puțin bazele.”
Well, odata ce stii un limbaj, le cam stii pe toate. :) Bine, tre’ sa inveti sintaxa + language specifics da’ bazele le stii deja, deci ar trebuie sa fie mult mai usor cu cat stii mai multe limbaje.

„Acum, dacă merită sau nu… îți dai seama că depinde ce faci. Dacă faci web dev (frontend, UI), probabil JS e o alegere mai bună decât python.”
True, true. JS e alegerea evidenta aici.
Dar nu ma refeream doar la strictul necesar ci mai curand la expansiune a toolset-ului existent – atat ptr. eventualele imbunatatiri ale workflow-ului curent cat si la deschiderea de noi orizonturi + posibilitati.
Asta incerc sa explorez in discutia asta.

De exemplu – si mai ales daca stai mult in cmdline – poti sa-ti scrii scripturile in python ptr. o claritate si viteza de editare mai mare + acces to diverse librarii nedisponibile in Bash sau Powershell. Sigur, exista optiunea de a folosi Node.js cu Js ptr. scripturi dar la capitolul claritate si brevity Python castiga.

Sau cum zicea si @Bilen python e miezul in machine learning – si in data manipulation/analysis (lasand la o parte R-ul care e specializat). Intrebarea e – exista aplicatii practice in viata de zi cu zi folositoare unui webdev si nu numai ptr. AI/Neural Networks/Data analysis/Etc care sa merite invatarea unui limbaj nou?
Benefits > Energy Costs?

Adaugă un comentariurăspuns pentru

Link-urile în context sunt binevenite. Comentariile fără nume/email valid sunt șterse.
PS: Comentariul NU este editabil.

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Site-ul blog.iamntz.com utilizează cookie-uri. Continuarea navigării presupune acceptarea lor. Mai multe informații.

windows apple dropbox facebook twitter