demystifying object-oriented programming - lone star php
TRANSCRIPT
![Page 1: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/1.jpg)
DemystifyingObject-Oriented Programming
Download Files:https://github.com/sketchings/oop-basics
https://joind.in/talk/1a5fa
![Page 2: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/2.jpg)
Presented by: Alena Holligan• Wife and Mother of 3 young children
• PHP Teacher at Treehouse
• Group Leader (PHPDX, Women Who Code Portland)
www.sketchings.com@[email protected]
![Page 3: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/3.jpg)
Terminologythe single most important part
![Page 4: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/4.jpg)
PART 1: TermsClass (properties, methods)
Object
Instance
Abstraction
Encapsulation
![Page 5: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/5.jpg)
PART 2: PolymorphismInheritance
Interface
Abstract Class
Traits
![Page 6: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/6.jpg)
Part 3: ADDED FEATURESNamespaces
Type Declarations
Static Methods
Magic Methods
Magic Constants
![Page 7: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/7.jpg)
Class
A template/blueprint that facilitates creation of objects. A set of program statements to do a certain task. Usually represents a noun, such as a person, place or thing.
Includes properties and methods — which are class functions
![Page 8: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/8.jpg)
Object
Instance of a class.
In the real world object is a material thing that can be seen and touched.
In OOP, object is a self-contained entity that consists of both data and procedures.
![Page 9: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/9.jpg)
Instance
Single occurrence/copy of an object
There might be one or several objects, but an instance is a specific copy, to which you can have a reference
![Page 10: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/10.jpg)
class User { //class private $name; //property public getName() { //method echo $this->name; }}
$user1 = new User(); //first instance of object
$user2 = new User(); //second instance of object
![Page 11: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/11.jpg)
Abstraction
Managing the complexity of the system
Dealing with ideas rather than events
This is the class architecture itself.
Use something without knowing inner workings
![Page 12: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/12.jpg)
Encapsulation
Binds together the data and functions that manipulate the data, and keeps both safe from outside interference and misuse.
Properties
Methods
![Page 13: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/13.jpg)
ScopeControls who can access what. Restricting access to some of the object’s components (properties and methods), preventing unauthorized access.
Public - everyone
Protected - inherited classes
Private - class itself, not children
![Page 14: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/14.jpg)
class User { protected $name; protected $title; public function getFormattedSalutation() { return $this->getSalutation(); } protected function getSalutation() { return $this->title . " " . $this->name; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getTitle() { return $this->title; } public function setTitle($title) { $this->title = $title; } }
![Page 15: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/15.jpg)
Creating / Using the object Instance$user = new User(); $user->setName("Jane Smith"); $user->setTitle("Ms"); echo $user->getFormattedSalutation();
When the script is run, it will return:
Ms Jane Smith
![Page 16: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/16.jpg)
Challenges
1. Create a new class with properties and methods
2. Instantiate a new user with a different name and title
3. Throw an error because your access is too restricted.
https://github.com/sketchings/oop-basics
![Page 17: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/17.jpg)
PART 2: PolymorphismD-R-YSharing Code
![Page 18: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/18.jpg)
pol·y·mor·phism /ˌpälēˈmôrfizəm/The condition of occurring in several different forms
BIOLOGY
GENETICS
BIOCHEMISTRY
COMPUTING
![Page 19: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/19.jpg)
TermsPolymorphism
Inheritance
Interface
Abstract Class
Traits
![Page 20: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/20.jpg)
Inheritance: passes knowledge down
Subclass, parent and a child relationship, allows for reusability, extensibility.
Additional code to an existing class without modifying it. Uses keyword “extends”
NUTSHELL: create a new class based on an existing class with more data, create new objects based on this class
![Page 21: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/21.jpg)
Creating a child class
class Developer extends User { public $skills = array(); //additional property
public function getSalutation() {//override method return $this->title . " " . $this->name. ", Developer"; } public function getSkillsString(){ //additional method return implode(", ",$this->skills); } }
![Page 22: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/22.jpg)
Using a child class
$developer = new Developer(); $developer->setName(”Jane Smith”); $developer->setTitle(“Ms”);
echo $developer; echo "<br />”;
$developer->skills = array("JavasScript", "HTML", "CSS");$developer->skills[] = “PHP";
echo $developer->getSkillsString();
![Page 23: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/23.jpg)
When run, the script returns:
Ms Jane Smith, Developer
JavasScript, HTML, CSS, PHP
![Page 24: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/24.jpg)
Interface
Interface, specifies which methods a class must implement.
All methods in interface must be public.
Multiple interfaces can be implemented by using comma separation
Interface may contain a CONSTANT, but may not be overridden by implementing class
![Page 25: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/25.jpg)
interface UserInterface {
public function getFormattedSalutation();
public function getName();
public function setName($name);
public function getTitle();
public function setTitle($title);
}
class User implements UserInterface { … }
![Page 26: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/26.jpg)
Abstract Class
An abstract class is a mix between an interface and a class. It can define functionality as well as interface.
Classes extending an abstract class must implement all of the abstract methods defined in the abstract class.
![Page 27: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/27.jpg)
abstract class User { //class
public $name; //property
public getName() { //method echo $this->name; }
abstract public function setName($name); //abstract method}
class Developer extends User { public setName($name) { //implementing the method …
![Page 28: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/28.jpg)
Traits
Composition
Horizontal Code Reuse
Multiple traits can be implemented
![Page 29: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/29.jpg)
Creating Traitstrait Toolkit { public $tools = array(); public function setTools($task) { switch ($task) { case “eat": $this->tools[] = array("Spoon", "Fork", "Knife"); exit; ... } } public function showTools() { return implode(", ",$this->skills); } }
![Page 30: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/30.jpg)
Using Traitsclass Developer extends User { use Toolkit; ... }
$developer = new Developer(); $developer->setName(”Jane Smith”); $developer->setTitle(”Ms”); echo $developer; echo "<br />"; $developer->setTools("Eat"); echo $developer->showTools();
![Page 31: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/31.jpg)
When run, the script returns:
Ms Jane Smith
Spoon, Fork, Knife
![Page 32: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/32.jpg)
Challenges1. Change to User class to an abstract class.
2. Extend the User class for another type of user, such as our Developer example
3. Add an Interface for the Developer Class (or your own class)
4. Add a trait to the User
https://github.com/sketchings/oop-basics
![Page 33: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/33.jpg)
Part 3: Added FeaturesNamespaces
Type Declarations
Magic Methods
Magic Constants
Static Methods
![Page 34: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/34.jpg)
NamespacesPrevent Code Collision
Help create a new layer of code encapsulation
Keep properties from colliding between areas of your code
Only classes, interfaces, functions and constants are affected
Anything that does not have a namespace is considered in the Global namespace (namespace = "")
![Page 35: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/35.jpg)
NamespacesMust be declared first (except 'declare)
Can define multiple in the same file
You can define that something be used in the "Global" namespace by enclosing a non-labeled namespace in {} brackets.
Use namespaces from within other namespaces, along with aliasing
![Page 36: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/36.jpg)
namespace myUser;
class User { //class
public $name; //property
public getName() { //method
echo $this->name;
}
public function setName($name);
}
class Developer extends \myUser\User { … }
![Page 37: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/37.jpg)
Available Type DeclarationsPHP 5.4
Class/Interface,
self, array,
callable
PHP 7
bool
float
int
string
![Page 38: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/38.jpg)
Type Declarationsclass Conference { public $title; private $attendees = array(); public function addAttendee(User $person) { $this->attendees[] = $person; } public function getAttendees(): array { foreach($this->attendees as $person) { $attendee_list[] = $person; } return $attendee_list; } }
![Page 39: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/39.jpg)
Using Type Declarations
$lonestar = new Conference(); $lonestar->title = ”Lone Star PHP”; $lonestart->addAttendee($user); echo implode(", “, $lonestar->getAttendees());
When the script is run, it will return the same result as before:
Ms Jane Smith
![Page 40: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/40.jpg)
Magic Methods
Setup just like any other method
The Magic comes from the fact that they are triggered and not called
For more see http://php.net/manual/en/language.oop5.magic.php
![Page 41: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/41.jpg)
Magic Constants
Predefined functions in PHP
For more see http://php.net/manual/en/language.constants.predefined.php
![Page 42: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/42.jpg)
Magic Methods and Constantsclass User { protected $name; protected $title; public function __construct($name, $title) { $this->name = $name; $this->title = $title; } public function __toString() { return __CLASS__. “: “ . $this->getFormattedSalutation(); } ... }
![Page 43: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/43.jpg)
Creating / Using the Magic Method$user = new User("Jane Smith","Ms"); echo $user;
When the script is run, it will return the same result as before:
User: Ms Jane Smith
![Page 44: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/44.jpg)
Adding a Static Methodsclass User { public $encouragements = array( “You are beautiful!”, “You have this!”, public static function encourage() { $int = rand(count($this->encouragements)); return $this->encouragements[$int]; } ... }
![Page 45: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/45.jpg)
Using the Static Methodecho User::encourage();
When the script is run, it will return the same result as before:
You have this!
![Page 46: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/46.jpg)
Challenges1. Define 2 “User” classes in one file using namespacing
2. Try defining types AND try accepting/returning the wrong types
3. Try another Magic Method http://php.net/manual/en/language.oop5.magic.php
4. Add Magic Constants http://php.net/manual/en/language.constants.predefined.php
5. Add and use a Static Method
https://github.com/sketchings/oop-basics
![Page 47: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/47.jpg)
Resources
LeanPub: The Essentials of Object Oriented PHP
Head First Object-Oriented Analysis and Design
![Page 48: Demystifying Object-Oriented Programming - Lone Star PHP](https://reader034.vdocument.in/reader034/viewer/2022042510/588948051a28abde5a8b5bb5/html5/thumbnails/48.jpg)
Presented by: Alena Holligan• Wife and Mother of 3 young children
• PHP Teacher at Treehouse
• Group Leader (PHPDX, Women Who Code Portland)
www.sketchings.com @[email protected]
Download Files: https://github.com/sketchings/oop-basics
https://joind.in/talk/1a5fa