Hi, if I understood you correctly!
<?php
class FirstModel {
public static function getClass()
{
return static::first();
}
public static function first()
{
return 'First Model';
}
}
class SecondModel extends FirstModel {
public static function first()
{
return 'Second Model';
}
}
var_dump(FirstModel::getClass()); // First Model
var_dump(SecondModel::getClass()); // Second Model
Instead of self, use static
The idea with randomFunction
<?php
abstract class Model {
abstract public function getClass();
}
class FirstModel extends Model {
public function getClass()
{
return static::first();
}
public function first()
{
return 'First Model';
}
}
class SecondModel extends FirstModel {
public function first()
{
return 'Second Model';
}
}
class ExplainHowItWorks {
/**
* @var Model $parent
*/
private $parent;
public function __construct(Model $parent) // Here, make sure you inject the parent class
{
$this->parent = $parent;
}
public function getRandom(){
return $this->parent->getClass();
}
}
var_dump((new ExplainHowItWorks(new FirstModel()))->getRandom()); // First Model
var_dump((new ExplainHowItWorks(new SecondModel()))->getRandom()); // Second Model