get set properties in php

64,956

Solution 1

There is none, although there are some proposals for implementing that in future versions. For now you unfortunately need to declare all getters and setters by hand.

private $ID;

public function setID($ID) {
  $this->ID = $ID;
}

public function getID() {
  return $this->ID;
}

for some magic (PHP likes magic), you can look up __set and __get magic methods.

Example

class MyClass {

  private $ID;

  private function setID($ID) {
    $this->ID = $ID;
  }

  private function getID() {
    return $this->ID;
  }


  public function __set($name,$value) {
    switch($name) { //this is kind of silly example, bt shows the idea
      case 'ID': 
        return $this->setID($value);
    }
  }

  public function __get($name) {
    switch($name) {
      case 'ID': 
        return $this->getID();
    }
  }

}


$object = new MyClass();
$object->ID = 'foo'; //setID('foo') will be called

Solution 2

Thanks for your answers everyone. It helped me to create something like this:

In my parent class:

public function __get($name){

    if (ObjectHelper::existsMethod($this,$name)){
        return $this->$name();
    }

    return null;
}

public function __set($name, $value){

    if (ObjectHelper::existsMethod($this,$name))
        $this->$name($value);
}

ObjectHelper::existsMethod is a method which just check if given protected method exists.

private $_propertyName = null;

protected function PropertyName($value = ""){

    if (empty($value)) // getter
    {
        if ($this-> _propertyName != null)
            return $this->_propertyName;
    }
    else // setter
    {
        $this-> _propertyName = $value;
    }

    return null;
}

So I can use something like this in any class:

$class = new Class();
$class->PropertyName = "test";
echo $class->PropertyName;

I was inspired by C# :)

What do you think about this, guys?

Here is my ObjectHelper if someone would like to use it:

namespace Helpers;

use ReflectionMethod;

class ObjectHelper {

public static function existsMethod($obj, $methodName){

    $methods = self::getMethods($obj);

    $neededObject = array_filter(
        $methods,
        function ($e) use($methodName) {
            return $e->Name == $methodName;
         }
    );

    if (is_array($neededObject))
        return true;

    return false;
}

public static function getMethods($obj){

    $var = new \ReflectionClass($obj);

    return $var->getMethods(ReflectionMethod::IS_PROTECTED);
}
}

Solution 3

Mchi is right, but there is another way of doing it by using single function

    private $ID;

public function ID( $value = "" )

{

    if( empty( $value ) )

        return $this->ID;

    else

        $this->ID = $value;

}

But yeah this approach is pretty much inline with what you do in c#. but this is only an alternative

Or try using php's __set and __get in your class more info here

http://php.net/manual/en/language.oop5.overloading.php

Solution 4

Another exampled using Variable function name

class MyClass {

  private $ID;
  protected $ID2;

  private function setID($ID) {
    $this->ID = $ID;
  }
  private function getID() {
    return $this->ID;
  }
  private function setID2($ID2) {
    $this->ID2 = $ID2;
  }

  private function getID2() {
    return $this->ID2;
  }
  public function __set($name,$value) {
    $functionname='set'.$name;
    return $this->$functionname($value);
  }
  public function __get($name) {
    $functionname='get'.$name;
    return $this->$functionname();
  }

}


$object = new MyClass();
$object->ID = 'foo'; //setID('foo') will be called
$object->ID2 = 'bar'; //setID2('bar') will be called
Share:
64,956
Jeppe Strøm
Author by

Jeppe Strøm

Updated on October 19, 2021

Comments

  • Jeppe Strøm
    Jeppe Strøm over 2 years

    I'm from the C# environment and I'm starting to learn PHP in school. I'm used to set my properties in C# like this.

    public int ID { get; set; }
    

    What's the equivalent to this in php?

    Thanks.