Get and set (private) property in PHP as in C# without using getter setter magic method overloading

Nope.

However what's wrong with using __get and __set that act as dynamic proxies to getName() and setName($val) respectively? Something like:

public function __get($name) { 
    if (method_exists($this, 'get'.$name)) { 
        $method = 'get' . $name; 
        return $this->$method(); 
    } else { 
        throw new OutOfBoundsException('Member is not gettable');
    }
}

That way you're not stuffing everything into one monster method, but you still can use $foo->bar = 'baz'; syntax with private/protected member variables...


ReflectionClass is your salvation

I know it's too late for Hendra but i'm sure it will be helpfull for many others.

In PHP core we have a class named ReflectionClass wich can manipulate everything in an object scope including visibility of properties and methods.

It is in my opinion one of the best classes ever in PHP.

Let me show an example:

If you have an object with a private property and u want to modify it from outside

$reflection = new ReflectionClass($objectOfYourClass);
$prop = $reflection->getProperty("PrivatePropertyName");
$prop->setAccessible(true);
$prop->setValue($objectOfYourClass, "SOME VALUE");
$varFoo = $prop->getValue();

This same thing you can do with methods eighter;

I hope i could help;


If using magical properties doesn't seem right then, as already pointed out by other posters, you can also consider ReflectionClass::getProperty and ReflectionProperty::setAccessible.

Or implement the necessary getter and setter methods on the class itself.

In response to the language features issue that you raised, I'd say that having a dynamically typed language differ from a statically typed one is expected. Every programming language that has OOP implements it somewhat differently: Object-Oriented Languages: A Comparison.