Demystifying Object-Oriented Programming - PHP UK Conference 2017

52
Demystifying Object-Oriented Programming Download Files: https://github.com/sketchings/oop-basics https://joind.in/talk/9b82a

Transcript of Demystifying Object-Oriented Programming - PHP UK Conference 2017

DemystifyingObject-Oriented Programming

Download Files:https://github.com/sketchings/oop-basics

https://joind.in/talk/9b82a

Why Object-Oriented?What’s wrong with procedural?

Terminologythe single most important part for learning

PART 1: TermsClass

properties

methods

Object

Instance

PART 2: Terms

Abstraction

Encapsulation

Scope

PART 3: TermsPolymorphism

Inheritance

Interface

Abstract Class

Traits

PART 4: Extra FeaturesStatic Methods

Magic Methods

Magic Constants

Namespaces

Type Declarations

Class

Template or Blueprint

Combination of Variables and Functions

A template/blueprint that facilitates creation of objects. House Human (DNA)A set of program statements to do a certain task. Usually represents a noun, such as a person, place or thing. Includes properties (variables) and methods (functions)

Object

Entity Created from the Class

Consists of both data and procedures

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 of an object

James Titcumb (@asgrim)

There might be one or several objects, but an instance is a specific copy, to which you assign a referenceJim, Jimmy, Jamie, Jimbo

class User { //class private $name; //property public function getName() { //method echo $this->name; //current object property }}

$user1 = new User(); //first instance of object

$user2 = new User(); //second instance of object

PART 2: Terms

Abstraction

Hides all but the relevant data about an object in order to reduce complexity and increase efficiency.

Use something without knowing inner workings

Managing the complexity of the systemexisting in thought or as an idea but not having a physical or concrete existence.relating to or denoting art that does not attempt to represent external reality, but rather seeks to achieve its effect using shapes, colours, and textures.consider something theoretically or separately from (something else).Use something like: care, computer

Encapsulation

Binds together the data and functions that manipulate the data, and keeps both safe from outside interference and misuse.

Properties

Methods

Helps you keep things together

Scope

Controls who has access

Public - everyone

Protected - inherited classes

Private - class itself, not children

Restricting access to some of the object’s components (properties and methods), preventing unauthorized access.

LIVE CODING DEMO!

Challenges:1. Create a new class with properties and methods2. Instantiate a new user with a different name and title3. Throw an error because your access is too restricted.

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

PART 3: Polymorphism

D-R-YSharing Code

pol·y·mor·phism /ˌpälēˈmôrfizəm/The condition of occurring in several different forms

BIOLOGY

GENETICS

BIOCHEMISTRY

COMPUTING

Polymorphism describes a pattern in object oriented programming in which classes have different functionality while sharing a common interface

TermsPolymorphism

Inheritance

Interface

Abstract Class

Traits

Inheritance

Pass information down

Only a single source

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

LIVE CODING DEMO!

Challenge: Extend the User class for another type of user, such as our Developer example

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->getFormatedSalutation();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

InterfaceRequirements for a particular TYPE of object

TIPS:

Multiple Interfaces may be implemented

All methods are public

May contain CONSTANT that cannot be overridden

Interface, specifies which methods a class must implement.All methods in interface must be public.Multiple interfaces can be implemented by using comma separationInterface may contain a CONSTANT, but may not be overridden by implementing class

LIVE CODING DEMO!

Challenge: 1. User implements UserInterface2. Add additional interfaces for the Developer 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

Mix between an interface and a class.

Classes extending an abstract class must implement all of the abstract methods defined in the abstract class.

It can define functionality as well as interface. abstract methods cannot be private because they are not a full method

LIVE CODING DEMO!

Challenge: User extend abstractUser

abstract class User { //class

public $name; //property

public function getName() { //method echo $this->name; }

abstract public function setName($name); //abstract method}

class Developer extends User { public setName($name) { //implementing the method …

Traits

Horizontal Code Reuse

Multiple traits may be used

LIVE CODING DEMO!

Challenge: Add a trait to the User

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); } }

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();

When run, the script returns:

Ms Jane Smith

Spoon, Fork, Knife

Part 3: Added FeaturesMagic Methods

Magic Constants

Static Methods

Namespaces

Type Declarations

Magic Methods

Setup just like any other method

Magic because triggered and not called

For more see http://php.net/manual/en/language.oop5.magic.php

Magic Constants

Predefined constants in PHP

For more see http://php.net/manual/en/language.constants.predefined.php

LIVE CODING DEMO!

class User { … public function __construct($name, $title) { $this->name = $name; $this->title = $title; } public function __toString() { return __CLASS__. “: “ . $this->getFormattedSalutation(); }}$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

Static Methods

You do NOT have to instantiate an object first

LIVE CODING DEMO!

public $encouragements = array( “You are beautiful!”, “You have this!”, public static function encourage() { $int = rand(count($this->encouragements)); return $this->encouragements[$int]; }echo User::encourage();

When the script is run, it will return:You have this!

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 = "")

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

namespace myUser;

class User { //class

public $name; //property

public getName() { //method

echo $this->name;

}

public function setName($name);

}

class Developer extends \myUser\User { … }

Type DeclarationsPHP 5.4

Class/Interface,

self, array,

callable

PHP 7

bool

float

int

string

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; } }

Using Type Declarations

$phpuk = new Conference(); $phpuk->title = ”PHP UK Conference 2017”;$phpuk->addAttendee($user); echo implode(", “, $phpuk->getAttendees());

When the script is run, it will return the same result as before:

Ms Jane Smith

Challenges1. Define 2 “User” classes. Call both classes from the same file

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

• Portland PHP User Group Leader

www.sketchings.com @[email protected]

Download Files: https://github.com/sketchings/oop-basics

https://joind.in/talk/9b82a