2014-01-17 4 views
0

У меня есть это, это не работает явно.Как добавить переменную к объекту в php

$start = $hours->start{$day}; 

Мне нужно изменить динамический день $. $ day может быть любой день недели

//For example 
$start = $hours->startSunday; 

Позвольте мне попытаться быть более ясным. Следующие объекты содержат определенное время

// will echo something like 8:00am 
echo $hours->startSunday; 

//will echo something like 7:00am 
echo $hours->startMonday; 

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

//so something like 
echo $hours->start.$day; 

но не работает

+0

вы можете показать полный код? – user2936213

+0

Не используйте переменные переменные имена. Попробуйте метод, например. '$ Часов-> старт ($ день)'. –

+0

почему бы не использовать этот 'call_user_func_array (массив ($ hours, 'start'. $ Day), $ args)'? – PRAISER

ответ

1

Во-первых. Вы можете отредактировать синтаксис с помощью

$hours = new stdClass(); 
$day = 'Sunday'; 
$hours->{'start'.$day} = 10; 
$start = $hours->{'start'.$day}; 
var_dump($start); 

Secnod. Лучше использовать методы getter и setter.

class Hours 
    { 
    private $hours = array(); 
    public function getStart($day) 
     { 
     return $this->hours[$day]; 
     } 
    public function setStart($day, $value) 
     { 
     $this->hours[$day] = $value; 
     } 
    } 
$hours = new Hours(); 
$day = 'Sunday'; 
$hours->setStart($day, 10); 
$start = $hours->getStart($day); 
var_dump($start); 
0

Вы можете использовать магический метод, __get() и __set()

class Hours { 
    private $data = array(); 

    public function __get($day) { 
     return $this->data[$day]; 
    } 

    public function __set($day, $val) { 
     $this->data[$day] = $val; 
    } 
} 

$h = new Hours(); 
echo $hours->startMonday; 
Смежные вопросы