How to error when setting undefined class properties in PHP

Josh Sherman
2 min read
Software Development PHP

Perhaps you have a class and you absolutely don’t want anyone tacking new properties onto it once it’s been instantiated. To do so, you can use PHP’s overloading to catch the setting of a variable and raise an error accordingly. Here is the default behavior where an object can have new properties defined on the fly:

class Object
{
}

$object      = new Object();
$object->foo = 'bar'; // No error

print_r($object); // public $foo => string(3) "bar"

And here’s how we can define a __set() method to help catch this behavior:

class Object
{
	public $test;

	public function __set($variable, $value)
	{
		throw new Exception('Setting "' . $variable . '" is forbidden!');
	}
}

$object       = new Object();
$object->test = 'ing'; // All good!
$object->foo  = 'bar'; // Exception will be thrown!

Pretty simple stuff. Basically any variable that isn’t already defined in the class and is public will throw an exception. But what if you wanted to make your variables private? That will take a bit of extra coding but still isn’t all that difficult:

class Object
{
	private $test;

	public function __set($variable, $value)
	{
		if (!property_exists($this, $variable))
		{
			throw new Exception('Setting "' . $variable . '" is forbidden!');
		}

		$this->$variable = $value;
	}
}

$object       = new Object();
$object->test = 'ing'; // All good!
$object->foo  = 'bar'; // Exception will be thrown!

Please note that the use of the property_exists() method is only available in PHP 5.1.0 and above.

Join the Conversation

Good stuff? Want more?

Weekly emails about technology, development, and sometimes sauerkraut.

100% Fresh, Grade A Content, Never Spam.

About Josh

Husband. Father. Pug dad. Musician. Founder of Holiday API, Head of Engineering and Emoji Specialist at Mailshake, and author of the best damn Lorem Ipsum Library for PHP.

Currently Reading

Parasie Eve

Previous Reads

Buy Me a Coffee Become a Sponsor

Related Articles