oop in php
TRANSCRIPT
Welcome to ‘Intro to OOP with PHP’ part 1
Thank you for your interest. Files can be found at https://github.com/sketchings/oop-basics
Contact Info:www.sketchings.com@[email protected]
What is OOP?
➔ Object-Oriented Programing➔ A programming concept that treats
functions and data as objects.➔ A programming methodology based on
objects, instead of functions and procedures
OOP vs Procedural or Functional
OOP is built around the "nouns", the things in the system, and what they are capable of Whereas procedural or functional programming is built around the "verbs" of the system, the things you want the system to do
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
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.
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
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
Abstraction
“An abstraction denotes the essential characteristics of an object that distinguish it from all other kinds of object and thus provide crisply defined conceptual boundaries, relative to the perspective of the viewer.”— G. BoochThis is the class architecture itself.
Encapsulation
Scope. Controls 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
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; }}
$user = new User();$user->setName("Jane Smith");$user->setTitle("Ms");echo $user->getFormattedSalutation();
When the script is run, it will return:
Ms Jane Smith
Creating / Using the object Instance
class User { protected $name; protected $title;
public function __construct($name, $title) { $this->name = $name; $this->title = $title; }
public function __toString() { return $this->getFormattedSalutation(); } ...}
For more see http://php.net/manual/en/language.oop5.magic.php
Constructor Method & Magic Methods
$user = new User("Jane Smith","Ms");echo $user;
When the script is run, it will return:
Ms Jane Smith
the same result as before
Creating / Using the object Instance
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
class Developer extends User { public $skills = array(); public function getSalutation() { return $this->title . " " . $this->name. ", Developer"; } public function getSkillsString() { echo implode(", ",$this->skills); }}
$developer = new Developer("Jane Smith", "Ms");echo $developer;echo "<br />";$developer->skills = array("JavasScript", "HTML", "CSS");$developer->skills[] = "PHP";$developer->getSkillsString();
Creating and using a child class
Polymorphism
Polymorphism describes a pattern in object oriented programming in which classes have different functionality while sharing a common interface
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
interface UserInterface { public function getFormattedSalutation(); public function getName(); public function setName($name); public function getTitle(); public function setTitle($title);}class User implements UserInterface { … }
Abstract
An abstract class is a mix between an interface and a class. It can define functionality as well as interface (in the form of abstract methods). Classes extending an abstract class must implement all of the abstract methods defined in the abstract class.
abstract class User { //class
public $name; //property
public getName() { //method
echo $this->name; }
abstract public function setName($name);}class Developer extends User { … }
Type Hinting
Functions are now able to force parameters to be objects, interfaces, arrays or callable. However, if NULL is used as the default parameter value, it will be allowed as an argument for any later call.If class or interface is specified as type hint, all its children/implementations are allowed.
class Resume { public $user; public function __construct(User $user) { $this->user = $user; }
public function formatHTML() {$string = $this->user->getName();
...
}
}
$resume = new Resume($developer);
Namespaces
- 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 = "")
Namespaces
- must 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
namespace myUser;class User { //class
public $name; //property
public getName() { //method
echo $this->name; }
public function setName($name);}class Developer extends \myUser\User { … }
Strengthen your skills
Code ReviewPair/peer programingContribute to open sourceOpen up a personal projectContinuous learningParticipate in the community, meetups, conferences, forums, teach
Online Training
NomadPHP.comTeamTreehouse.com (locally on meetup)learnhowtoprogram.com (by epicodus)codeschool.com (great GIT intro)freecodecamp.com, coursera.org, udemy.com, lynda.com
BooksDesign Patterns: Elements of Reusable Object-Oriented Software - by Erich GammaMastering Object Oriented PHP - by Brandon SavagePython 3 Object Oriented Programming - by Dusty Phillips Practical Object-Oriented Design in Ruby - by Sandi MetzClean Code / The Clean Coder - both by Robert MartinThe Pragmatic Programmer – by Andrew Hunt/David Thomas
Refactoring: Improving the Design of Existing Code- by Martin Fowler
Podcasts, Videos and People
Listing: phppodcasts.comVoices of the ElephpantPHP Roundtable
YouTube: PHPUserGroupNomadPHP
People: @CalEvans, @LornaJane, @adamculphttps://twitter.com/sketchings/lists/php
Challenges
1. Change to User class to an abstract class.2. Throw an error because your access is too
restricted.3. Extend the User class for another type of
user, such as our Developer example4. Define 2 “User” classes in one file using
namespacing
Thank You from Alena Holligan
Help me improve:Survey: http://goo.gl/forms/4Huh9uCSGDJoind.in: https://joind.in/event/php-oop1
Contact Info:www.sketchings.com@[email protected]