У меня есть набор переменных, которые мне нужны для нескольких других классов.Я расширил «хорошую» функцию получения (которая на лету угадывает имя переменной и выдает функции «set» / «get») для работы с установщиками в.
Пример:
Винтерфейс / родитель / что угодно: public $name;
В каком-то другом классе, который загружает класс 'mySetterGetter': $set_get = new mySetterGetter(); $set_get->get_name();
.
К сожалению, я не могу использовать переменные в интерфейсе и могу 'расширить класс с несколькими родительскими классами.Есть ли другой способ загрузить эти «интерфейсы» / расширить класс Set / Get?
Что мне нужно сделать, это следующее:
// This should be my "interface" one
class myIntegerInterface
{
public $one;
public $two;
public $three;
}
// This should be my "interface" two
class myStringInterface
{
public $foo;
public $bar;
public $whatever;
}
// This is my setter/getter class/function, that needs to extend/implement different variable classes
class mySetterGetter implements myIntegerInterface, myStringInterface
{
/**
* Magic getter/setter method
* Guesses for a class variable & calls/fills it or throws an exception.
* Note: Already defined methods override this method.
*
* Original @author Miles Keaton <mileskeaton@gmail.com>
* on {@link http://www.php.net/manual/de/language.oop5.overloading.php#48440}
* The function was extended to also allow 'set' tasks/calls.
*
* @param (string) $val | Name of the property
* @param unknown_type $x | arguments the function can take
*/
function __call( $val, $x )
{
$_get = false;
// See if we're calling a getter method & try to guess the variable requested
if( substr( $val, 0, 4 ) == 'get_' )
{
$_get = true;
$varname = substr( $val, 4 );
}
elseif( substr( $val, 0, 3 ) == 'get' )
{
$_get = true;
$varname = substr( $val, 3 );
}
// See if we're calling a setter method & try to guess the variable requested
if( substr( $val, 0, 4 ) == 'set_' )
{
$varname = substr( $val, 4 );
}
elseif( substr( $val, 0, 3 ) == 'set' )
{
$varname = substr( $val, 3 );
}
if ( ! isset( $varname ) )
return new Exception( "The method {$val} doesn't exist" );
// Now see if that variable exists:
foreach( $this as $class_var => $class_var_value )
{
if ( strtolower( $class_var ) == strtolower( $varname ) )
{
// GET
if ( $_get )
{
return $this->class_var_value;
}
// SET
else
{
return $this->class_var_value = $x;
}
}
}
return false;
}
}