Î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
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]);
}
Ultima chestie am vazut-o pe forum
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?
@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’: Phyton e la mare cautare acum si e de viitor pentru ca este limbajul principal de programare pentru machine learning.
@Ionuț Staicu:
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.
” 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.
„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?
@ionut staicu, ai un link pe github cu diverse proiecte de ale tale in php ?
Sunt curios de modul cum lucreaza alti oameni si imi place sa invat de la altii…
@laurentiu: Păi sunt iamntz peste tot. Inclusiv pe github
stai sa vezi ce misto o sa fie cand o sa inveti si de finally.
si dupa aia si de retry.
@alescx: De `finally` știu. De `retry` acum aud prima dată; cred că-i specific limbajelor multi-thread, nu?
@Ionuț Staicu:
poti re executa secv de cod
Retry nu exista in java, c#
in php a ramas la stadiul de rfc
https://wiki.php.net/rfc/retry-keyword
mi se pare buna ideea lui
@Cosmin:

Precizare: Reexecutarea este ideea acelui retry
@Ionuț Staicu: cum se spune și mai jos, este RFC. Sper să-l vad implementat