2015-02-23 7 views
0

Есть ли способ инициализировать свойство класса PHP из другого свойства класса? У меня есть ряд свойств, я хотел бы зависеть друг от друга для легкой модификации корневого значения:Инициализировать свойство класса

class Anon { 
    private static $a = 5; 
    private static $b = '+' . (2 * self::$a); 
} 

Однако это вызывает ошибку синтаксиса. У меня были проблемы с поиском этого, но я не видел, чтобы кто-то пытался это сделать!

+0

У вас не может быть операторов и вызовов функций в объявлении свойств, вам придется решить это с помощью методов класса. Руководство по PHP: «Это объявление может включать в себя инициализацию, но эта инициализация должна быть постоянным значением» - http://de2.php.net/manual/en/language.oop5.properties.php –

ответ

3

Вы можете инициализировать статическую переменную с помощью метода Init

<?php 
    class Anon { 
     private static $a = 5; 
     private static $b ; 
     public static function Init(){ 
      self::$b = '+' . (2 * self::$a); 
     } 
     public static function getB(){ 
      return self::$b; 
     } 
    } 
    Anon::Init(); 
    echo Anon::getB(); 
    ?> 
+0

Спасибо! Я выбрал это, потому что он имеет комбинацию одноразового init и функции getter. Будет полезно для других по линии. –

1

Зависит от того, как вы используете класс, но, возможно, это поможет:

class Anon { 
    private static $a = 5; 
    private static $b; 

    function __construct() { 
     self::$b = '+' . (2 * self::$a); 
    } 

    public function getB() { 
     return self::$b; 
    } 
} 

$anon = new Anon; 
echo $anon->getB(); 
+0

с этим решением, '$ b 'будет инициализироваться каждый раз, когда объект будет создан, и это неправильно! –

+0

Почему это неправильно? – grimmdude

1

К сожалению PHP не могут разобрать нетривиальное выражение в то время как класс загружается
Вот решение для инициализации статические члены

class Anon { 
     private static $a; 
     private static $b; 

    public static function init() { 
     self::$a = 5; 
     self::$b = '+' . (2 * self::$a); 
    } 
    } 

Anon::init(); 
+0

нет 'void' в PHP –

+0

@KheshavSewnundun спасибо за ваше редактирование :) –

1

Нельзя получить доступ к свойствам частного класса напрямую. Вы можете публично.

class Anon { 
    public static $a = 5; 
} 

print Anon::$a; 

или использовать публичную функцию, как и другие примеры для доступа $b;

class Anon { 

    private static $a = 5; 
    private static $b; 

    public static function init() { 
     return self::$b = '+' . (2 * self::$a); 
    } 
} 

echo Anon::init();