Skip to main content

Classes and Objects

Classes and Objects are the foundation of Object Oriented Programming.

Everything in modern PHP frameworks is built using classes and objects.

Examples:

  • PocketMine Players
  • Worlds
  • Commands
  • Plugins
  • Laravel Controllers
  • APIs
  • Databases

What is a Class?

A class is a blueprint.

Think about:

House Blueprint

The blueprint itself is not a real house.

It only describes:

  • Rooms
  • Doors
  • Windows
  • Colors

Similarly:

class Player {

}

does not create a player.

It only defines what a player should look like.


What is an Object?

An object is the actual thing created from the blueprint.

Example:

Blueprint → House

Actual House → Object

Visualization

Player Class

├── name
├── money
├── rank

├── sendMessage()
├── kick()
└── ban()

Objects:

Steve
Alex
Aayan

Creating Your First Class

class Player {

}

Nothing happens yet.


Creating an Object

$player =
new Player();

The keyword:

new

allocates memory and creates an object.


Memory Representation

RAM

Player Object

├── name
├── money
└── rank

Variable:

$player

contains a reference to this object.


Creating Multiple Objects

$p1 = new Player();
$p2 = new Player();
$p3 = new Player();

Memory:

Object1
Object2
Object3

All independent.


Objects Are Independent

Example:

$p1->name = "Aayan";

$p2->name = "Steve";

Changing one object does not affect others.


Adding Properties

class Player {

public string $name;

public int $money;

}

Creating Data

$player =
new Player();

$player->name =
"Aayan";

$player->money =
5000;

Accessing Data

echo $player->name;

Output:

Aayan

Adding Methods

class Player {

public function hello() {

echo "Hello";

}

}

Calling Methods

$player =
new Player();

$player->hello();

Object Operator

PHP uses:

->

Example:

$player->name

$player->sendMessage()

This means:

Access something inside object.

Example Class

class Player {

public string $name;

public int $money;

public function addMoney(
int $amount
): void {

$this->money += $amount;

}

}

Creating Object

$player =
new Player();

$player->name =
"Aayan";

$player->money =
5000;

$player->addMoney(
1000
);

echo $player->money;

Output:

6000

The $this Keyword

Inside a class:

$this

means:

Current Object

Example:

$this->money

means:

Money of THIS object.

Example

$p1 =
new Player();

$p2 =
new Player();

$p1->money = 100;
$p2->money = 500;

Inside:

$this->money

will point to different values.


Class Naming Rules

Good:

Player
PlayerManager
EconomyAPI

Bad:

player
myclass
abc

Naming Convention

PHP follows:

PascalCase

Example:

PlayerManager
UserRepository
DatabaseConnection

File Naming Convention

Player.php
EconomyAPI.php
Database.php

One Class Per File

Good:

Player.php

Bad:

Player.php

contains:

Player
World
Server
Database

Real PocketMine Example

use pocketmine\player\Player;

Player itself is a class.


Example:

$player =
$event->getPlayer();

Returns:

Player Object

Then:

$player->sendMessage();

calls a method inside Player class.


Another Example

$server =
$this->getServer();

Returns:

Server Object

Then:

$server->broadcastMessage();

Objects Can Contain Objects

Example:

Server

├── Players[]
├── Worlds[]
└── Scheduler

Everything is objects.


Example Architecture

class Server {

public array $players;

}

Each element:

Player Object

Comparing Objects


Equality

$p1 == $p2

Compares values.


Identity

$p1 === $p2

Compares memory reference.


Example:

$p1 = new Player();
$p2 = new Player();

var_dump(
$p1 === $p2
);

Output:

false

Assigning Objects

$p1 =
new Player();

$p2 =
$p1;

Now both point to same object.


Memory:

p1 ─┐


Object


p2 ─┘

Changing:

$p2->money = 500;

also changes:

$p1->money

Cloning Objects

$p2 =
clone $p1;

Creates new object.


Memory:

p1 → Object1

p2 → Object2

Anonymous Objects

(new Player())
->hello();

Useful for temporary objects.


Object Lifecycle

Class Loaded

new

Object Created

Methods Called

Destroyed

Real World Example

Player System:

class Player {

public string $name;

public int $money;

}

Objects:

Aayan
Steve
Alex

Each player becomes an object.


Why Everything Uses Objects

Because objects group:

  • Data
  • Logic
  • State

together.

Without objects:

$name
$money
$rank

would exist everywhere.

Chaos.


Beginner Mistakes


Forgetting new

Wrong:

$player =
Player();

Correct:

$player =
new Player();

Using Dot Operator

Wrong:

$player.name

Correct:

$player->name

Accessing Missing Properties

Wrong:

$player->coins

when property doesn't exist.


Treating Objects Like Arrays

Wrong:

$player["name"]

Correct:

$player->name

Best Practices

✅ One class per file.

✅ Use PascalCase.

✅ Keep classes small.

✅ Group related functionality.

✅ Prefer objects over globals.


Exercises


Exercise 1

Create:

class Car {

}

Properties:

brand
color
speed

Exercise 2

Create:

class Server {

}

Methods:

start()
stop()
broadcast()

Exercise 3

Create:

class Economy {

}

Methods:

addMoney()
removeMoney()

Mini Project

Create:

Player Class

Properties:

name
rank
money
kills
deaths

Methods:

sendMessage()
addMoney()
setRank()

Quiz

What is a class?

Answer

Blueprint used to create objects.


What is an object?

Answer

Instance created from a class.


Which operator accesses object members?

Answer
->

Which keyword creates objects?

Answer
new

Which keyword copies objects?

Answer
clone

Real PocketMine Architecture

PluginBase

Main

Server

WorldManager

World

Player

Inventory

Item

Everything is an object.


References

PHP OOP:

https://www.php.net/manual/en/language.oop5.basic.php


Next Chapter

➡ Properties and Typed Properties ➡ Methods and $this ➡ Constructors