[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Для работы класса нужен второй класс
abdula81
Ребят посоветуйте.
Есть класс товары Product
Есть класс счета Invoice

За создание счета отвечает метод create()
Мне надо массив всех товаров передать в класс счета перед созданием.

Верна ли такая постановка?
$product = new Product();

$invoice = new Invoice();
$invoice->setProducts($product->getAll());
$invoice->create();

Guest
abdula81 Наследование
kaww
Цитата (abdula81 @ 25.04.2018 - 18:38)
Мне надо массив всех товаров передать в класс счета перед созданием.

Если перед созданием, т.е. invoice не может существовать без products, то можно внедрять через конструктор:
class Invoice
{
public function __construct($products)
}
$invoice = new Invoice($product->getAll());

abdula81
Цитата (kaww @ 26.04.2018 - 04:11)
Цитата (abdula81 @ 25.04.2018 - 18:38)
Мне надо массив всех товаров передать в класс счета перед созданием.

Если перед созданием, т.е. invoice не может существовать без products, то можно внедрять через конструктор:

Как раз массив товаров нужен только при создании счета. Сам класс Товары обычно не нужен классу Счет.
Через конструктор не очень понятно, что надо или не надо передать.
А тут более читабельно вроде получается.

Про наследование вообще не понял. Что от чего наследовать? Это два абсолютно разных класса.
Kusss
я профан правда, но сделал бы метод, который вызовет класс Product и запросит товары
class Invoice
{
private function ProductArray()
{
$product = new Product();
return $product->getAll();
}
public function setProducts()
{
$ProductAll = $this->ProductArray();
}
}
SerginhoLD
Цитата (abdula81 @ 25.04.2018 - 10:38)
Ребят посоветуйте.
Есть класс товары Product
Есть класс счета Invoice

За создание счета отвечает метод create()
Мне надо массив всех товаров передать в класс счета перед созданием.

Верна ли такая постановка?
<pre class="sh_sourceCode" rel="php"><span class="sh_variable">$product</span> <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">Product</span><span class="sh_symbol">();</span>

<span class="sh_variable">$invoice</span> <span class="sh_symbol">=</span> <span class="sh_keyword">new</span> <span class="sh_function">Invoice</span><span class="sh_symbol">();</span>
<span class="sh_variable">$invoice</span><span class="sh_symbol">-></span><span class="sh_function">setProducts</span><span class="sh_symbol">(</span><span class="sh_variable">$product</span><span class="sh_symbol">-></span><span class="sh_function">getAll</span><span class="sh_symbol">());</span>
<span class="sh_variable">$invoice</span><span class="sh_symbol">-></span><span class="sh_function">create</span><span class="sh_symbol">();</span></pre>

вот и передавать массив товаров, твой "счет" не должен заниматься получением товаров, он должен использовать товары

class Invoice
{
protected $products = [];

public function __construct(array $products)
{
$this->products = $products;
}

// а тут уже какие-то методы расчетов
}


$products = [/* Как-то получаешь нужный список товаров */];
$invoice = new Invoice($products);

// и что-то там делаешь, например сохраняешь расчеты в файл
$invoice->saveToFile('invoice.xml');


p.s. хотя можно и как у тебя в первом сообщении, остальные тебе чушь насоветовали

_____________
"internet explorer всех правильней отображает страницы" ©
Invis1ble
Цитата (abdula81 @ 26.04.2018 - 11:43)
Сам класс Товары обычно не нужен классу Счет.

А когда Счёт может быть без Товаров? Это намёк.

_____________

Профессиональная разработка на заказ

Я на GitHub | второй профиль

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.