I am trying to make a class what will contain a set of properties. it will be used like so:
$class = new test_class();
$class->property;
$class->second_property;
Basically, if the properties exist, then they are true, if the properties do not exist, they are false. The properties have no value, only existence.
Now, I want to do something like this:
$class = new test_class();
var_dump($class->property); // false - property does not exist
var_dump($class->second_property); // true - second_property exists
var_dump( (bool) $class); // true
So if even one property of the test class exists, var dumping the $class will show true because it is an object.
However, in the situation where the class has no properties, I want this to happen:
$class = new test_class();
var_dump($class->property); // false - property does not exist
var_dump($class->second_property); // false - second_property does not exist
var_dump( (bool) $class); // false
But, I still want $class to be instanceof the test_class but return false in a logic test.
Is this at all possible? If so, how would I do it?
Thanks, Ozzy
edit:
To clarify, I am already using the __get() magic function. What I want to happen is if the test_class has no properties, then when a var_dump is performed on it, it returns false but an instanceof will return test_class.
elaborating…
I am creating a complex permissions system.
A user gets assigned sections and each section has a set of permissions.
It will work like this:
$user = permissions::get_user(USER_ID_HERE);
// Every property of the $user is a section
var_dump($user->this_section_exists); // true - returns an object
var_dump($user->this_section_doesnt); // false - returns a boolean
If a section exists, then it returns an object of the sections permissions.
var_dump($user->this_section_exists); // true
var_dump($user->this_section_exists->this_permission_exists); // true
var_dump($user->this_section_exists->this_permission_doesnt); // false
Heres the edge case:
var_dump($user->this_section_doesnt); // false
var_dump($user->this_section_doesnt->some_permission);
// This should also return false, which it does,
// But it throws a notice: "Trying to get property of non-object"
I want to be able to either suppress that notice without any modifications to the code which calls the class, ie, no @ to suppress.. or be able to return an object with no properties which evaluates to false on a logic test.
That is not possible,
var_dumpwill always show you the correct type, that’s what it was made for.