Software engineering principles, from Robert C. Martin’s book Clean Code, adapted for PHP. This is not a style guide. It’s a guide to producing readable, reusable, and refactorable software in PHP.
E trivial ce explică tipul ăsta aici.
Am zâmbit când am văzut că trebuie să declari ditamai clasa ca să nu trimiți 4 parametri, dar la faza cu function x(int a, int b) eram deja pe jos de râs.
Câte proiecte merg pe PHP 7? Poate nici 0,1%. Și eu am proiecte de versiunea 7, dar ele trebuie folosite și pe 5.X.
Plus că el se bazează foarte mult pe clase scrise de la 0, pe când majoritatea framework-urilor îți dictează un anume mod de a lucra cu clase, fie și custom, și nu prea vrei să stai 5 zile să identifici o discuție pe ceva forum obscur despre ce problemă a apărut că tu au vrut să faci o clasă frumoasă, utilă, dar uite, complet inutilizabilă.
Apoi, sunt singurul care detestă genul ăsta de cod?
$car = (new Car())
->setColor(‘pink’)
->setMake(‘Ford’)
->setModel(‘F-150’)
->dump();
Ai ceva care sa-ti sustina afirmatia?
http://php.net/supported-versions.php
Poate vrei sa treci totusi pe 7.x, daca nu pentru viteza in plus, macar pentru faptul ca intr-un an nu vei mai avea niciun fel de suport pe 5.x
14 contributors
48 Watch, 918 Stars, 100 Fork
Lol, de parcă eu decid ce versiune de PHP să fie instalată. Nici măcar cel care dă banii nu decide. Decide administratorul de sistemul după cum bate vântul.
La un client i-am cerut de 1 an de zile un mediu de dezvoltare. Aștept și azi.
Cât despre Watch, Stars and Forks, e plină lumea de indieni care căută să-și facă reputație. Și de începători pentru care ce scrie acolo e de actualitate.
Dacă un client îți zice că îți poate furniza maximum PHP 3 și Mysql 2, cum procedezi?
Am numai 2 clienți, unul de 11 ani, altul de vreo 3. Dacă vreunul zice de a continua un proiect făcut în PHP 3, well, roll those sleeves, them bills aren’t going to get paid by themselves.
Just my 2 cents.
Chestiile care sunt descrise in acea pagina sunt de foarte mare ajutor in special cand lucrezi intr-o echipa cu mai mult de 1-2 oameni. Si, da, se aplica peste orice framework. O stiu din experienta pentru ca am lucrat pe Magento ( ZF1), Laravel 5+, CakePHP si Symfony. Toate au la baza diferite implementari ale unor Design Patterns consacrate.
Ziceai ca el se bazeaza pe clase scrise de la 0. Sa inteleg ca tu nu scrii asa ceva? E posibil sa fii surprins. Chiar si acel “XYZController extends Controller” e tot de la zero scris. Si daca vrei sa ai parte de un cod usor de modificat si curat poti folosi oricand un design pattern sau se extragi codul in clase specializate. Nu cred ca exista un framework care sa NU iti permita asta.
Problema 2, cea cu clasa si metodele chainned. Eu unul prefer stilul ala intr-un Factory oricand decat sa am zeci de parametri in __construct() pe care mai apoi trebuie sa-i intretin si sa-i modific dupa noile cerinte. E mai usor sa adaugi un call de metoda decat un parametru pe care m-ai apoi sa-ti omori creierul cautand pe unde l-ai mai instantiat si pe unde iti mai crapa app-ul.
Si in final, referitor la dilema cu PHP-ul. Daca clientul e cel care iti dicteaza ce sa folosesti atunci tu nu mai esti un consultant ci doar butonezi cod. Mii de scuze ca suna ca si cum sunt cu nasul pe sus, insa chiar nu stiu cum sa formulez altfel. Inteleg ca facturile nu se platesc singure, insa nici proiectele pe care vom lucra nu se vor schimba daca continuam sa lucram in stilul consacrat romanesc si anume: "sa traiti, sefu’!"
Te rog sa vezi acest comentariu exact ca pe un feedback si nimic altceva, iar daca e ceva ce consideri ca e deplasat da-mi feedback si schimb.
O zi faina!
Da.
Ți se pare mai intuitiv să ai new Car('pink', 'ford', 'f-150')
și eventual încă vreo 2-3 parametri?
Sunt 2 chestii diferite. In exemplul de pe github este vorba despre method chaining
, iar in exemplul tau este Constructor injection
in loc de Setter injection
.
Ce prefer e:
$car = new Car();
$car->setType($type);
$car->setModel($model);
etc.
Când pun cursorul pe $car, îmi apar frumos selectate toate operațiile pe care le fac asupra obiectului $car. Iar apoi identarea unei astfel de structuri e trasă de păr. Pui -> pe linie nouă, merită să le pui pe aceeași linie? Cum le legi ca vizual să aibă logică?
Cât despre clase scrise de la 0, scriu destule. Dar de fiecare dată rămân cu impresia că framework-ul e nemulțumit că nu extind ceva clasă de-al lui și nu implementez o listă de metode de observație, metode care îmi sunt inutile, dar interfața dictează.
Apoi despre consultant vs. orice altceva. Nu am pretins să fiu ceva titulatură. Nu cunosc pe nimeni să caute consultanți sau pe cineva care să fie căutat ca și consultant. Da, feedback-ul e mereu cerut, dar fiindcă un SSD se mișcă mai repede decât un HDD, asta nu înseamnă că cineva te va asculta.
Am demonstrat de sute de ori că metoda mea e mai rapidă și mai ușor de înțeles, nu contează. După cum am zis, nici măcar persoana care ne plătește nu alege tehnologia. Ea e aleasă de persoanele disponibile și la prețul rezonabil pe care e dispus omul să-l plătească. Așa că degeaba PHP 7 merge mai bine dacă nu găsești programatori capabili și care să nu fie $200 pe oră să-l folosească.
Iar apoi, ce să facem? Să refuzăm orice proiect unde nu suntem noi șeful? La proiectele la care lucrez am făcut peste $40.000 în 2 ani (pentru 4 ore pe zi). Așa ceva se găsește în 1% din toate ofertele. Majoritatea proiectelor dacă ajung la 1.000 de euro pe lună e mare minune. Aici pe site se discută mai degrabă de Wordpress unde $250 e normalul.
Sunt pus în toate grupurile de talent pe Upwork, nu e nimic extraordinar acolo. Chestii de genul (dacă apar 2 job-uri pe lună e o lună foarte activă):
[Pro: Pre-Screen] “Cabana” C# Developer
Posted Mon, Aug. 28 - Fixed - Est.Budget: $500
Poate se poate sugera un marketplace unde există persoane care dau sume normale, de $50-$100 pe oră, pentru un programator. Înafară de Crossover (de care multă lume se plânge), TopTal și parcă mai era unul, nu știu. Plus că evaluarea e cel puțin găunoasă. La Crossover am înțeles că te pune să lucrezi 2-3 zile pe gratis.
Trăgând linie, cine a citit README.md-ul și i s-a părut că vede ceva nou în el?
Offtopic - method chaining pentru constructie e cam iffy, desi e des intalnit in multe locuri. Mie nu-mi place deoarece nu este clar ce campuri sunt required si ce nu, si risti sa ai un obiect intr-o stare nedeterminata.
Am înțeles greșit rant-ul lui @RedGuard; am presupus că nemulțumirea lui e legată de settere, nu de chaining.
Eu prefer
$car = new Car([
'make' => 'Ford',
'model' => 'Focus RS',
'year' => 2017,
]);
pai nici un camp nu e obligatoriu in exemplul ala. ca faci $car = new Car() sau (new Car())->… e fix acelasi lucru.
ps: chainingul nu-i pt constructie.
Si eu l-am detestat, insa de multe ori am ajuns la astfel de forma.
Intr-adevar nu cand e vorba despre entity-uri, ci mai mult DTO-uri pentru care am multiple factory-uri (pot fi generate fie dintr-un request GET, unul post, un token etc).
Din ce am vazut, acest proiect GitHub - piotrplenik/clean-code-php: 🛁 Clean Code concepts adapted for PHP este printre cele mai active in 2017