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