2015-06-08 2 views
2

У меня есть класс следующим образом:Можно ли использовать класс как переменную в PHP?

class Integer { 

private $variable; 

public function __construct($variable) { 
    $this->varaible = $variable; 
} 

// Works with string only 
public function __isString() { 
return $this->variable; 
} 

// Works only, If Im using the class as a function (i must use parenthesis) 
public function __invoke() { 
return $this->variable; 
} 

} 


$int = new Integer($variable); 

Я хотел бы работать с классом, как с переменной, как:

$result = $int + 10;

Я не известно, как я могу вернуть $int;?

+1

Это все магические методы: https://php.net/manual/en/language.oop5.magic.php. Не похоже, что это возможно. –

+0

'$ result = $ int + 10;' '' '$ int' и' 10' имеют несовместимые типы данных для добавления –

+0

Я хотел бы вернуться где-нибудь в переменной класса (int) $ this->; – steelbull

ответ

6

PHP не поддерживает перегрузку операторов (это техническая вещь, которую вы ищете). Он не знает, что делать с +, когда один из операндов class Integer, и нет никакого способа научить PHP, что делать. Лучшее, что вы можете сделать, это реализовать соответствующие методы:

class Integer { 
    .. 
    public function add(Integer $int) { 
     return new Integer($this->variable + $int->variable); 
    } 
} 

$a = new Integer(1); 
$b = new Integer(2); 
echo $a->add($b); 
+0

Большое спасибо. Я подумал :-( – steelbull

0

Да, см. Пример 4 страницы php call_users_func();

<?php 

class myclass { 
    static function say_hello() 
    { 
     echo "Hello!\n"; 
    } 
} 

$classname = "myclass"; 

call_user_func(array($classname, 'say_hello')); 
call_user_func($classname .'::say_hello'); // As of 5.2.3 

$myobject = new myclass(); 

call_user_func(array($myobject, 'say_hello')); 

?> 
-2

public function __construct($variable) { $this->varaible = $variable; } являются это опечатка или нет? на $ this-> varaible?