2016-11-09 5 views
3

У меня есть объект $customerЧто такое лучший способ создать новый объект

Мне нужно создать новый объект $contact с контактной информацией Что такое лучший способ создать его?

/** the first way */ 
$contact = (object) array('name' => $customer->name, 'phone' => $customer->phone, 'email' => $customer->email); 

/** the second way */ 
$contact = new stdClass(); 
$contact->name = $customer->name; 
$contact->phone = $customer->phone; 
$contact->email = $customer->email;` 
+1

2-й путь, безусловно, легче читать. –

+0

2nd, так как нет необходимости в преобразовании –

+0

Как насчет '$ contact = clone $ customer;'? – AbraCadaver

ответ

1

Pre: См this answer для обсуждения с помощью StdClass или массив для удержания репрезентативных данных.

Ответ:

  1. Первый способ очень плохо, что вы добавляете ненужные накладные расходы в преобразовании массива в объект (когда вы могли бы использовать массив для этой цели).

  2. Второй способ работает, но не идеален. Это действительно не относится к объекту (в коде), поскольку вы будете относиться к объекту (в жизни) и, следовательно, не подходят объектно-ориентированной парадигме. (Однако, как представляется, это лучший вариант для этой ситуации, согласно комментариям.)

  3. Лучший способ (с точки зрения OO) - определить класс объекта.

Пример определения:

class Contact{ 
    public $name; 
    public $phone; 
    public $email; 

    function __construct($name, $phone, $email) { 
    $this->name = $name; 
    $this->phone = $phone; 
    $this->email = $email; 
    } 
} 

Пример конкретизации:

$contact = new Contact($customer->name, 
    $customer->phone, 
    $customer->email); 
+3

_very bad_, _acceptable_, _best_? Говорит кто? – AbraCadaver

+0

Спасибо за ответ, но я использую фреймворк, где я не хочу определять собственные классы. КПП. почему вы определили функцию Contact и не использовали функцию __construct? –

+0

@AbraCadaver Говорит принципы проектирования OO. – Kittsil

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