SlideShare a Scribd company logo
Demystifying

Object-Oriented Programming
Download Files:

https://github.com/sketchings/oop-basics
https://joind.in/talk/1a5fa
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

@sketchings

alena@holligan.us
Terminology
the single most important part
PART 1: Terms
Class (properties, methods)
Object
Instance
Abstraction
Encapsulation
PART 2: Polymorphism
Inheritance
Interface
Abstract Class
Traits
Part 3: ADDED FEATURES
Namespaces
Type Declarations
Static Methods
Magic Methods
Magic Constants
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
Managing the complexity of the system
Dealing with ideas rather than events
This is the class architecture itself.
Use something without knowing inner workings
Encapsulation
Binds together the data
and functions that
manipulate the data, and
keeps both safe from
outside interference and
misuse.
Properties
Methods
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;

}

}
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
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
PART 2:
Polymorphism
D-R-Y

Sharing Code
pol·y·mor·phism
/ˌpälēˈmôrfizəm/
The condition of occurring in several different forms
BIOLOGY
GENETICS
BIOCHEMISTRY
COMPUTING
Terms
Polymorphism
Inheritance
Interface
Abstract Class
Traits
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
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);

}

}
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();
When run, the script returns:
Ms Jane Smith, Developer
JavasScript, HTML, CSS, PHP
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 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.
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

…
Traits
Composition
Horizontal Code Reuse
Multiple traits can be implemented
Creating Traits
trait 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);

}

}
Using Traits
class 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();
When run, the script returns:
Ms Jane Smith
Spoon, Fork, Knife
Challenges
1. 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
Part 3: Added Features
Namespaces
Type Declarations
Magic Methods
Magic Constants
Static Methods
Namespaces
Prevent 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 = "")
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 myUserUser { … }
Available Type Declarations
PHP 5.4
Class/Interface,
self, array,
callable
PHP 7
bool
float
int
string
Type Declarations
class 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;

}

}
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
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
Magic Constants
Predefined functions in PHP
For more see http://php.net/manual/en/
language.constants.predefined.php
Magic Methods and Constants
class User {

protected $name;

protected $title;



public function __construct($name, $title) {

$this->name = $name;

$this->title = $title;

}



public function __toString() {

return __CLASS__. “: “

. $this->getFormattedSalutation();

}

...

}
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
Adding a Static Methods
class User {

public $encouragements = array(

“You are beautiful!”,

“You have this!”,



public static function encourage()

{

$int = rand(count($this->encouragements));

return $this->encouragements[$int];

}

...

}
Using the Static Method
echo User::encourage();
When the script is run, it will return the same result
as before:
You have this!
Challenges
1. 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
Resources
LeanPub: The Essentials of Object Oriented PHP
Head First Object-Oriented Analysis and Design
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

@sketchings

alena@holligan.us
Download Files: https://github.com/sketchings/oop-basics
https://joind.in/talk/1a5fa

More Related Content

PDF
Demystifying Object-Oriented Programming - Midwest PHP
PDF
Demystifying Object-Oriented Programming #phpbnl18
PDF
Demystifying Object-Oriented Programming #ssphp16
PDF
Demystifying oop
PDF
OOP in PHP
PDF
Value objects
PPT
PHP- Introduction to Object Oriented PHP
PDF
How to write code you won't hate tomorrow
Demystifying Object-Oriented Programming - Midwest PHP
Demystifying Object-Oriented Programming #phpbnl18
Demystifying Object-Oriented Programming #ssphp16
Demystifying oop
OOP in PHP
Value objects
PHP- Introduction to Object Oriented PHP
How to write code you won't hate tomorrow

What's hot (18)

PDF
Migrare da symfony 1 a Symfony2
PDF
GDI Seattle - Intro to JavaScript Class 2
PDF
Web 9 | OOP in PHP
PDF
Sorting arrays in PHP
PDF
Introduction to Twig
PDF
Revisiting SOLID Principles
PDF
international PHP2011_Bastian Feder_jQuery's Secrets
PDF
Dependency Injection
PDF
Writing Sensible Code
PPT
Class 2 - Introduction to PHP
PDF
tutorial7
PDF
Web 11 | AJAX + JSON + PHP
PDF
PHP object calisthenics
PDF
Web 10 | PHP with MySQL
PDF
8時間耐久CakePHP2 勉強会
ODP
PHP pod mikroskopom
PDF
Making the most of 2.2
Migrare da symfony 1 a Symfony2
GDI Seattle - Intro to JavaScript Class 2
Web 9 | OOP in PHP
Sorting arrays in PHP
Introduction to Twig
Revisiting SOLID Principles
international PHP2011_Bastian Feder_jQuery's Secrets
Dependency Injection
Writing Sensible Code
Class 2 - Introduction to PHP
tutorial7
Web 11 | AJAX + JSON + PHP
PHP object calisthenics
Web 10 | PHP with MySQL
8時間耐久CakePHP2 勉強会
PHP pod mikroskopom
Making the most of 2.2
Ad

Viewers also liked (9)

PPTX
Object-Oriented Programming with PHP (part 1)
PDF
PHP Experience 2016 - ROA – Resource Oriented Architecture
PDF
Simple Web Services with PHP
PDF
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
PPTX
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
PPTX
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
PPTX
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
PDF
Process Oriented Architecture
PDF
Integrating React.js Into a PHP Application
Object-Oriented Programming with PHP (part 1)
PHP Experience 2016 - ROA – Resource Oriented Architecture
Simple Web Services with PHP
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
Process Oriented Architecture
Integrating React.js Into a PHP Application
Ad

Similar to Demystifying Object-Oriented Programming - Lone Star PHP (20)

PDF
Demystifying Object-Oriented Programming - ZendCon 2016
PDF
Demystifying Object-Oriented Programming - PHP UK Conference 2017
PDF
Demystifying Object-Oriented Programming - PHP[tek] 2017
PDF
Obect-Oriented Collaboration
PDF
Take the Plunge with OOP from #pnwphp
PPT
Class 7 - PHP Object Oriented Programming
PPTX
Ch8(oop)
PDF
OOP in PHP
PPT
Php object orientation and classes
ZIP
Object Oriented PHP5
PDF
Object Oriented Programming in PHP
PDF
Architecture logicielle #3 : object oriented design
PPTX
Lecture 17 - PHP-Object-Orientation.pptx
PPTX
Only oop
PPTX
PHP OOP Lecture - 04.pptx
PPTX
UNIT III (8).pptx
PPTX
UNIT III (8).pptx
PPTX
Object Oriented PHP by Dr.C.R.Dhivyaa Kongu Engineering College
PPT
Go OO! - Real-life Design Patterns in PHP 5
PPTX
FFW Gabrovo PMG - PHP OOP Part 3
Demystifying Object-Oriented Programming - ZendCon 2016
Demystifying Object-Oriented Programming - PHP UK Conference 2017
Demystifying Object-Oriented Programming - PHP[tek] 2017
Obect-Oriented Collaboration
Take the Plunge with OOP from #pnwphp
Class 7 - PHP Object Oriented Programming
Ch8(oop)
OOP in PHP
Php object orientation and classes
Object Oriented PHP5
Object Oriented Programming in PHP
Architecture logicielle #3 : object oriented design
Lecture 17 - PHP-Object-Orientation.pptx
Only oop
PHP OOP Lecture - 04.pptx
UNIT III (8).pptx
UNIT III (8).pptx
Object Oriented PHP by Dr.C.R.Dhivyaa Kongu Engineering College
Go OO! - Real-life Design Patterns in PHP 5
FFW Gabrovo PMG - PHP OOP Part 3

More from Alena Holligan (20)

PDF
2023 Longhorn PHP - Learn to Succeed .pdf
PDF
Environmental variables
PDF
Dev parent
PDF
Dependency Injection
PDF
Dependency Management
PDF
Experiential Project Design
PDF
Reduce Reuse Refactor
PDF
Organization Patterns: MVC
PDF
When & Why: Interfaces, abstract classes, traits
PDF
Object Features
PDF
WordCamp Portland 2018: PHP for WordPress
PDF
Let's Talk Scope
PDF
Exploiting the Brain for Fun and Profit
PDF
Environmental Variables
PDF
Learn to succeed
PDF
Exploiting the Brain for Fun & Profit #zendcon2016
PDF
Presentation Bulgaria PHP
PDF
Presentation pnwphp
PDF
Exploiting the Brain for Fun and Profit - Lone Star 2016
PDF
Exploiting the Brain for Fun & Profit #ssphp16
2023 Longhorn PHP - Learn to Succeed .pdf
Environmental variables
Dev parent
Dependency Injection
Dependency Management
Experiential Project Design
Reduce Reuse Refactor
Organization Patterns: MVC
When & Why: Interfaces, abstract classes, traits
Object Features
WordCamp Portland 2018: PHP for WordPress
Let's Talk Scope
Exploiting the Brain for Fun and Profit
Environmental Variables
Learn to succeed
Exploiting the Brain for Fun & Profit #zendcon2016
Presentation Bulgaria PHP
Presentation pnwphp
Exploiting the Brain for Fun and Profit - Lone Star 2016
Exploiting the Brain for Fun & Profit #ssphp16

Recently uploaded (20)

PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
cuic standard and advanced reporting.pdf
PPTX
Programs and apps: productivity, graphics, security and other tools
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PPT
Teaching material agriculture food technology
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Machine Learning_overview_presentation.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Getting Started with Data Integration: FME Form 101
PPTX
Spectroscopy.pptx food analysis technology
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Machine learning based COVID-19 study performance prediction
PDF
Empathic Computing: Creating Shared Understanding
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
cuic standard and advanced reporting.pdf
Programs and apps: productivity, graphics, security and other tools
Group 1 Presentation -Planning and Decision Making .pptx
Teaching material agriculture food technology
Spectral efficient network and resource selection model in 5G networks
Machine Learning_overview_presentation.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Diabetes mellitus diagnosis method based random forest with bat algorithm
Per capita expenditure prediction using model stacking based on satellite ima...
Getting Started with Data Integration: FME Form 101
Spectroscopy.pptx food analysis technology
Encapsulation_ Review paper, used for researhc scholars
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Machine learning based COVID-19 study performance prediction
Empathic Computing: Creating Shared Understanding
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
MYSQL Presentation for SQL database connectivity
Building Integrated photovoltaic BIPV_UPV.pdf

Demystifying Object-Oriented Programming - Lone Star PHP

  • 2. 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
 @sketchings
 [email protected]
  • 4. PART 1: Terms Class (properties, methods) Object Instance Abstraction Encapsulation
  • 6. Part 3: ADDED FEATURES Namespaces Type Declarations Static Methods Magic Methods Magic Constants
  • 7. 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
  • 8. 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.
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. Encapsulation Binds together the data and functions that manipulate the data, and keeps both safe from outside interference and misuse. Properties Methods
  • 13. 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
  • 14. 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;
 }
 }
  • 15. 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
  • 16. 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
  • 18. pol·y·mor·phism /ˌpälēˈmôrfizəm/ The condition of occurring in several different forms BIOLOGY GENETICS BIOCHEMISTRY COMPUTING
  • 20. 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
  • 21. 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);
 }
 }
  • 22. 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();
  • 23. When run, the script returns: Ms Jane Smith, Developer JavasScript, HTML, CSS, PHP
  • 24. 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
  • 25. interface UserInterface { public function getFormattedSalutation(); public function getName(); public function setName($name); public function getTitle(); public function setTitle($title); } class User implements UserInterface { … }
  • 26. 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.
  • 27. 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
 …
  • 29. Creating Traits trait 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);
 }
 }
  • 30. Using Traits class 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();
  • 31. When run, the script returns: Ms Jane Smith Spoon, Fork, Knife
  • 32. Challenges 1. 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
  • 33. Part 3: Added Features Namespaces Type Declarations Magic Methods Magic Constants Static Methods
  • 34. Namespaces Prevent 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 = "")
  • 35. 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
  • 36. namespace myUser; class User { //class public $name; //property public getName() { //method echo $this->name; } public function setName($name); } class Developer extends myUserUser { … }
  • 37. Available Type Declarations PHP 5.4 Class/Interface, self, array, callable PHP 7 bool float int string
  • 38. Type Declarations class 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;
 }
 }
  • 39. 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
  • 40. 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
  • 41. Magic Constants Predefined functions in PHP For more see http://php.net/manual/en/ language.constants.predefined.php
  • 42. Magic Methods and Constants class User {
 protected $name;
 protected $title;
 
 public function __construct($name, $title) {
 $this->name = $name;
 $this->title = $title;
 }
 
 public function __toString() {
 return __CLASS__. “: “
 . $this->getFormattedSalutation();
 }
 ...
 }
  • 43. 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
  • 44. Adding a Static Methods class User {
 public $encouragements = array(
 “You are beautiful!”,
 “You have this!”,
 
 public static function encourage()
 {
 $int = rand(count($this->encouragements));
 return $this->encouragements[$int];
 }
 ...
 }
  • 45. Using the Static Method echo User::encourage(); When the script is run, it will return the same result as before: You have this!
  • 46. Challenges 1. 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
  • 47. Resources LeanPub: The Essentials of Object Oriented PHP Head First Object-Oriented Analysis and Design
  • 48. 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
 @sketchings
 [email protected] Download Files: https://github.com/sketchings/oop-basics https://joind.in/talk/1a5fa