Addil
Addil

Reputation: 105

How to make an abstract variable static to a sub class

<?php
abstract class A {
    public static $var = "A";
    public function setVar() {

    }
    public function test() {
        $this->setVar();
        echo static::$var;
    }

    public function returnVar() {
        return static::$var;
    }
}

class B extends A {
    public function setVar() {
        static::$var = 'B';
    }
}

class C extends A {
    public function setVar() {
        static::$var = 'C';
    }
}

$class = new B();
$class->test();

$class2 = new C();
$class2->test();

echo "</br>";
echo $class->returnVar();
echo $class2->returnVar();

?>

What I'm trying to do is make the variable $var static to the class that extends abstract class A without having to re-declare it else where.

So say perhaps I create multiple objects from class B that extends A, I want all objects made from class B to share the same $var value.

Say I then create objects based on class C, they should all share the same value of $var...

This is the result I'm currently getting:

BC
CC

However, what I'm looking for is:

BC
BC

Thanks

Upvotes: 0

Views: 99

Answers (1)

JustOnUnderMillions
JustOnUnderMillions

Reputation: 3795

Try it like that:

  #setting
  public function setVar() {
    static::$var[get_class($this)] = 'B';
  }
  #getting in abstract 
   public function returnVar() {
      return static::$var[get_class($this)];
  }
  #add this in the abstract class 
  public function setVar();

Upvotes: 2

Related Questions