2015-03-27 3 views
1
class JSON_Response{ 
      private $ResponseCode = "RVN-775"; 
      private $ResponseDescription = "Unknown Request"; 
      private $ResponseOf = "Unknown"; 
      private $ResponsePayload = array("PayloadEmpty"->"Yes"); 

      function __construct(
          $ResponseCode = null, 
          $ResponseDescription = null, 
          $ResponseOf = null, 
          $ResponsePayload = null, 
          ) 
     { 
      $this->ResponseCode = $ResponseCode ? $ResponseCode : $this->ResponseCode; 
      $this->ResponseDescription = $ResponseDescription ? $ResponseDescription : $this->ResponseDescription; 
      $this->ResponseOf = $ResponseOf ? $ResponseOf : $this->ResponseOf; 
      $this->ResponsePayload = $ResponsePayload ? $ResponsePayload : $this->ResponsePayload; 

     } 
    } 

Есть ли лучший способ написать это?PHP необязательные аргументы

Я хочу, чтобы переменные класса были установлены, если конструктор получает параметры при создании объекта, если параметры не заданы, тогда я хочу, чтобы переменные класса были по умолчанию.

+0

Этот вопрос, вероятно, быть лучшим совпадением для http://programmers.stackexchange.com/ – Havelock

+0

Я делаю это все время, и я делаю это в основном, так как ваш вопрос говорит об этом. Я устанавливаю переменные класса по умолчанию, а затем устанавливаю их в переданные значения, если не null. – FactoryAidan

+2

@ Havelock нет, если код работает, то он подходит для codereview.SE (он должен работать, они очень строгие), это в противном случае вопрос «наилучшей практики» в маскировке и быстро получит закрыты для программистов. –

ответ

1

Это будет переопределять значения по умолчанию, если передаются некоторые аргументы:

class JSON_Response{ 
     function __construct(
         $ResponseCode = "RVN-775", 
         $ResponseDescription = "Unknown Request", 
         $ResponseOf = "Unknown", 
         $ResponsePayload = array("PayloadEmpty"->"Yes"), 
         ) 
    { 
     $this->ResponseCode = $ResponseCode; 
     $this->ResponseDescription = $ResponseDescription; 
     $this->ResponseOf = $ResponseOf; 
     $this->ResponsePayload = $ResponsePayload; 

    } 
} 
0

вы можете попробовать передачи массива:

function __construct($args) { 
    foreach ($args as $k => $v) { 
     //if (property_exists($this,$k)) -- optionally you want to set only defined properties 
     $this->{$k} = $v; 
    } 
} 

, а затем создать объект с помощью:

$object = new JSON_Response(array(
    'ResponseOf' => 'test' 
)); 
0

Вы можете использовать все __constructor() в массиве и назначить значение в переменной класса, если массив params существует класс v ariable ключ, это позволит уменьшить размер кода и лучше использовать его, смотри ниже пример кода

<?php 

class JSON_Response { 

    private $ResponseCode = "RVN-775"; 
    private $ResponseDescription = "Unknown Request"; 
    private $ResponseOf = "Unknown"; 
    private $ResponsePayload = array("PayloadEmpty" => "Yes"); 

    function __construct($params = array()) { 
     if(!empty($params)){ 
      foreach ($params as $k => $v){ 
       $this->{$k} = $v; 
      } 
     } 
    } 
} 

#call class from with array params 
$class_params = array('ResponseCode' => '', 'ResponseDescription' => '', 
'ResponseOf' => '', 'ResponsePayload' => ''); 
$obj = new JSON_Response($class_params); 

, если какая-либо переменная класса не существует в ключе Params, то переменная класса значение по умолчанию будет использовать

Смежные вопросы