איך לכתוב מחלקות משורשרות ב PHP
או בלי להתאמץ יותר מידי איך לכתוב מחלקות ב PHP שיעבדו בצורה דומה ל jQuery.
הפוסט הזה מתעסק באיך לעשות לנו חיים קלים ולעזור לנו לכתוב את הקוד מהר יותר
אנחנו מבזבזים המון זמן בכתיבה של מחלקות ופונקציות אבל אנחנו לא שמים לב כמה זמן אנחנו מבזבזים בשביל לקרוא למחלקות האלה
לכל מי שעובד עם jQuery הפוסט הזה במיוחד בשבילכם
דרך העבודה הבסיסית ב jQuery נראית בערך ככה :
1 2 | $('#element').css({width:500,height:350}) .attr('src','http://www.websupport.co.il').show(); |
אם היינו צריכים לכתוב את אותו הדבר ב PHP סביר להניח שזה היה נראה ככה :
1 2 3 4 | $element = new element(); $element->css(array('width'=> 500 , 'height'=>350)); $element->attr('src','http://www.websupport.co.il'); $element->show(); |
המטרה של כל הפוסט הזה הוא לגרום לקטע הקוד שמעל השורה הזאת להראות ככה :
1 2 3 4 5 | $element = element::create() ->css(array('width'=> 500 , 'height'=>350)) ->attr('src','http://www.websupport.co.il') ->show() ; |
אז איך עושים את זה ?
בוא נניח שיש לנו מחלקה שבונה מכוניות , עם מספר פונקציות (לפלצנים שבניכם : מטודות) שכל פונקציה משנה property אחר במכונית, לא מסובך אבל שימו לב לשינוי מהדרך הרגילה שבה אתם רגילים לכתוב מחלקות
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | > class CarBuillder { private $car = array(); public function __construct(){} public function __destruct(){} public function create() { return new self(); } public function color($color) { $this->car['color'] = $color; return $this; } public function doors($num_of_doors = 4) { $this->car['doors'] = $num_of_doors; return $this; } public function engine($engine = 1600) { $this->car['engine'] = $engine; return $this; } public function maker($maker) { $this->car['maker'] = $maker; return $this; } public function year() { $this->;car['year'] = date('Y'); return $this; } public function getCarInfo() { return $this->car; } } |
ועכשיו בשביל "לבנות" מכונית נעשה משהו כזה :
1 2 3 4 5 6 7 8 9 10 | $MyCar = CarBuillder::create() ->maker('Honda') ->color('black') ->engine(1800) ->doors(5) ->year() ->getCarInfo() ; print_r($MyCar); |
מה נקבל ? הונדה שחורה 5 דלתות עם מנוע 1800 שנת 2010 (בצורת מערך אבל עדיין הונדה
)
איפה הקסם ? (או מה בעצם שונה ממה שעשיתם עד עכשיו)
שימו לב שאני לא קורא בכלל ל new ClassName , אלא אני ניגש למחלקה בצורה סטטית לפונקציה create והפונקציה מחזירה לי מופע חדשה של המחלקה (instance)
עכשיו ברגע שיש לי מופע חדש של המחלקה לתוך המשתנה זה בעצם כאילו קראתי ל new ClassName ואז קראתי לפונקציה בתוך המחלקה (נניח $car->setColor('red'); )
מפה יש לי 2 אפשרויות או להמשיך לעבוד בדרך הישנה או פשוט לעבור לדרך החדשה ולקרוא לפונקציות האחרות
אז מה היה לנו בעצם ?
קראנו ליצירת מופע של המחלקה , והפעלנו פונקציה אחת, הבעיה היא איך מפעילים את שאר הפונקציות
שימו לב שבסיום כל פונקצייה החזרתי את המופע של המחלקה (המשתנה $this) על מנת שנוכל להמשיך ולשרשר אליו פונקציות.
זהו ,זה כל הסיפור פשוט ולא מסובך
מעבר ליופי , יש גם יתרונות מבחינת שימוש , תחשבו שאתם בונים ככה את המחלקה שניגשת למסדי נתונים תנסו לקבל את נתונים מה REQUEST ולהתמודד איתם בצורה של המחלקה הזה
תגלו שאולי תחסכו כל מיני תנאים בדרך שלא הייתם צריכים פעם.
סתם לדוגמא
1 2 3 4 5 6 7 | $report = reports::create() ->from('01-01-2009') ->to('31-12-2009') ->minSales(5) ->maxSales(50) ->groupBy('day') ; |
זה הכל להפעם
תגובות , הערות , הארות יתקבלו בברכה (ספאם לא !)
ועד לפעם הבאה, תהנו.
אחלה טיפ, להחזיר את ה-this. איך לא חשבתי על זה בעצמי?
[...] במחלקות משורשרות (למי שלא יודע מה זה -הנה תזכרות קטנה איך לכתוב מחלקות משורשרות ב PHP [...]