Bird
Raised Fist0
PHPprogramming~5 mins

Access modifiers (public, private, protected) in PHP

Choose your learning style10 modes available
Introduction

Access modifiers control who can use or change parts of your code. They help keep your code safe and organized.

When you want everyone to use or see a part of your code.
When you want only the code inside a class to use or change something.
When you want only the class and its child classes to access a part of the code.
When you want to hide details that should not be changed directly.
When you want to protect important data from accidental changes.
Syntax
PHP
class ClassName {
    public $publicVar;
    private $privateVar;
    protected $protectedVar;

    public function publicMethod() {}
    private function privateMethod() {}
    protected function protectedMethod() {}
}

public means anyone can access.

private means only inside the class can access.

protected means inside the class and child classes can access.

Examples
This class shows all three access modifiers on properties and methods.
PHP
<?php
class Car {
    public $color;
    private $engineNumber;
    protected $speed;

    public function setColor($c) {
        $this->color = $c;
    }

    private function setEngineNumber($num) {
        $this->engineNumber = $num;
    }

    protected function setSpeed($s) {
        $this->speed = $s;
    }
}
Protected method greet is used inside child class method sayHello.
PHP
<?php
class ParentClass {
    protected function greet() {
        echo "Hello from Parent\n";
    }
}

class ChildClass extends ParentClass {
    public function sayHello() {
        $this->greet();
    }
}

$child = new ChildClass();
$child->sayHello();
Private property secret is accessed only inside the class via a public method.
PHP
<?php
class Example {
    private $secret = "hidden";

    public function reveal() {
        return $this->secret;
    }
}

$obj = new Example();
echo $obj->reveal();
Sample Program

This program shows how public, private, and protected properties and methods work. Public is accessed directly, private only inside the class, and protected inside the class and child classes.

PHP
<?php
class Box {
    public $width;
    private $height;
    protected $depth;

    public function __construct($w, $h, $d) {
        $this->width = $w;
        $this->height = $h;
        $this->depth = $d;
    }

    public function getHeight() {
        return $this->height;
    }

    protected function getDepth() {
        return $this->depth;
    }
}

class BigBox extends Box {
    public function showDepth() {
        return $this->getDepth();
    }
}

$box = new Box(10, 20, 30);
echo "Width: " . $box->width . "\n";
echo "Height: " . $box->getHeight() . "\n";

$bigBox = new BigBox(15, 25, 35);
echo "BigBox Depth: " . $bigBox->showDepth() . "\n";
OutputSuccess
Important Notes

Trying to access private or protected properties directly from outside the class will cause an error.

Protected members are useful when you want child classes to use or change something but keep it hidden from the outside.

Use public for things meant to be used freely, private for things to hide completely, and protected for things shared with child classes.

Summary

Access modifiers control who can see or change parts of your code.

Public means anyone can access, private means only inside the class, protected means inside the class and child classes.

They help keep your code safe and organized by hiding details you don't want changed directly.

Practice

(1/5)
1. Which access modifier allows a property or method to be accessed from anywhere, including outside the class?
easy
A. public
B. private
C. protected
D. static

Solution

  1. Step 1: Understand access levels

    Public means accessible from anywhere, private means only inside the class, protected means inside class and subclasses.
  2. Step 2: Match the description

    The question asks for access from anywhere, which matches public.
  3. Final Answer:

    public -> Option A
  4. Quick Check:

    Public = accessible anywhere [OK]
Hint: Public means open to all code everywhere [OK]
Common Mistakes:
  • Confusing private with public access
  • Thinking protected is accessible outside class
  • Mixing static with access modifiers
2. Which of the following is the correct way to declare a private property named $data in a PHP class?
easy
A. private $data;
B. public $data;
C. protected $data;
D. var $data;

Solution

  1. Step 1: Recall PHP property declaration syntax

    Access modifiers come before the variable name with a dollar sign, e.g., private $data;
  2. Step 2: Identify private declaration

    Only private $data; uses 'private' correctly before the variable.
  3. Final Answer:

    private $data; -> Option A
  4. Quick Check:

    private property syntax = private $data; [OK]
Hint: Use 'private' keyword before $variable for private property [OK]
Common Mistakes:
  • Using 'var' instead of access modifiers
  • Forgetting the dollar sign before variable
  • Mixing public or protected when private is needed
3. What will be the output of the following PHP code?
class Test {
    private $secret = 'hidden';
    public function reveal() {
        return $this->secret;
    }
}
$obj = new Test();
echo $obj->reveal();
medium
A. secret
B. Error: Cannot access private property
C. null
D. hidden

Solution

  1. Step 1: Understand private property access inside class

    Private properties can be accessed inside class methods using $this->property.
  2. Step 2: Check method reveal() returns private property

    The reveal() method returns $this->secret, which is 'hidden'. So echo prints 'hidden'.
  3. Final Answer:

    hidden -> Option D
  4. Quick Check:

    Private accessed inside class method = allowed [OK]
Hint: Private properties accessible inside class methods [OK]
Common Mistakes:
  • Thinking private properties can't be accessed even inside class
  • Expecting error when accessing private inside class
  • Confusing property name with string output
4. Identify the error in this PHP code:
class ParentClass {
    protected $value = 10;
}

class ChildClass extends ParentClass {
    public function getValue() {
        return $this->value;
    }
}

$obj = new ParentClass();
echo $obj->value;
medium
A. Syntax error in class declaration
B. ChildClass cannot extend ParentClass
C. Cannot access protected property from outside the class
D. No error, outputs 10

Solution

  1. Step 1: Understand protected property access

    Protected properties can be accessed inside the class and child classes, but not from outside.
  2. Step 2: Check code usage

    The code tries to echo $obj->value where $obj is ParentClass instance, accessing protected property from outside, causing error.
  3. Final Answer:

    Cannot access protected property from outside the class -> Option C
  4. Quick Check:

    Protected outside class = error [OK]
Hint: Protected properties not accessible outside class or children [OK]
Common Mistakes:
  • Trying to access protected property directly from object
  • Confusing protected with public
  • Assuming no error when accessing protected externally
5. Given the following PHP classes, what will be the output?
class Base {
    private $data = 'base';
    protected $info = 'protected info';
    public function getData() {
        return $this->data;
    }
}

class Derived extends Base {
    public function getInfo() {
        return $this->info;
    }
    public function getDataFromBase() {
        return $this->data;
    }
}

$obj = new Derived();
echo $obj->getData() . ' & ' . $obj->getInfo() . ' & ' . $obj->getDataFromBase();
hard
A. base & protected info & base
B. base & protected info & Error accessing private property
C. Error accessing private property & protected info & base
D. Error accessing private property & Error accessing protected property & Error

Solution

  1. Step 1: Analyze private property access in Derived

    Private property $data is only accessible inside Base class. Derived cannot access $this->data directly.
  2. Step 2: Check method calls and outputs

    getData() returns $data from Base (allowed), getInfo() returns protected $info (allowed in Derived), getDataFromBase() tries to access private $data directly (causes error).
  3. Final Answer:

    base & protected info & Error accessing private property -> Option B
  4. Quick Check:

    Private inaccessible in child = error [OK]
Hint: Private properties not accessible in child classes [OK]
Common Mistakes:
  • Assuming private properties are inherited and accessible
  • Confusing protected with private access
  • Expecting no error when accessing private from child
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard