2015-05-19 2 views
1

Я хотел знать Как назначить пары значений значения массива парам значений атрибутов объекта в PHP. Это то, что я пытаюсь. Я использую конструктор для установки всех атрибутов, посылая все значения массива frm через параметр при создании объекта. Но я считаю, что должен быть более сжатый и эффективный способ сделать это. если кто-нибудь знает, пожалуйста, поделитесь.Как назначить пары значений ключа массива парам значений атрибутов объекта в PHP

function display_stock($connection) 
{ 
$query = "SELECT * FROM `stock` "; 
$result= mysqli_query($connection, $query); 
$stock = array(); 
for ($i = 0;$row= mysqli_fetch_assoc($result); $i++) 
{ 
    $stock[$i] = new stock($row); 
} 
return $stock; 
} 

Это код конструктора

public function __construct($l_code, $date, $all_lengths_size, $overall_cost) 
{ 
    $this->l_code=$l_code; 
    $this->date=$date; 
    $this->all_lengths_size=$all_lengths_size; 
    $this->overall_cost=$overall_cost; 
} 

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

+1

Не действительно, если вы не хотите передавать в самом массиве 'new sale ($ row)' и конструктор вытаскивает любые биты его потребностей. –

+0

Может быть, это лучший подход, потому что этот кажется длинным! –

+0

Я согласен с подходом @ MarcB. Что делать, если ваши строки тоже меняются? Вы не хотите менять код в этом объявлении длинного объекта, а также в его конструкторе. –

ответ

1

Вы можете использовать конструктор, набор свойств, соответственно, как это:

public function __construct($row){ 
foreach ($row as $prop=>$value){ 
    $this->$prop=$value; 
} 
} 

или вы можете установить только те свойства интерес как этот

public function __construct($row){ 
    $propertiesilike=array("customer_name", "p_type"); 
foreach ($propertiesilike as $prop){ 
    if(isset($row[$prop])){ 
    $this->$prop=$value; 
    } 
} 
} 
+0

1-й холодный. Но во втором, где u принимает значение $ value? его не определено! Я считаю, что вы хотели написать это $ this -> $ prop = $ row [$ prop]; –

2

Другой вариант, при условии, что запрос возвращает столбцы, которые должны заполнить объект, вы можете использовать mysqli_fetch_object():

while($sale[] = mysqli_fetch_object($result, 'sale')) {} 

Это заполняет свойства перед вызовом __construct(). Существует третий параметр для передачи параметров конструктору.

+0

Незначительное улучшение: 'sale :: class' лучше вместо' 'sale''. – Jon

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