class ProductController extends Controller
{
private $service;
public function __construct($id, $module, ProductManageService $service, $config = [])// что это значит класс ProductManageService
в методе в другого класса
{
$this->service = $service;
}
class ProductManageService
{
private $products;
public function __construct(ProductRepository $products)// что это значит класс ProductRepository
в методе в другого класса
{
$this->products = $products;
}
public function create(ProductCreateForm $form)// что это значит класс ProductCreateForm
в методе в другого класса
{}
объясните пожалуйста по подробней что это за ограничение
Классы, в которых объявлен метод-конструктор, будут вызывать этот метод при каждом создании нового объекта
Т.е. при создании объекта данного класса, он принимает экземпляр указанного в параметрах __construct() класса, а обращение к этому экземпляру возможно по названию соседней переменной
ProductManageService => $service
или ProductRepository => $products
dima0077, можете привести пример рецепта супа, и наглядно показать какие продукты можно бросать в суп, а какие нельзя?
Подсказка: примеры конечно можно привести, но описать ВСЕ случаи практически невозможно, и уж точно такое перечисление не будет ни наглядным ни простым.
<?php
class C {}
class D extends C {}
// Это не является расширением класса C.
class E {}
function f(C $c) {
echo get_class($c)."\n";
}
f(new C);
f(new D);
f(new E);
?>
сложно понять что написано тут
class ProductController extends Controller
{
private $service;
public function __construct($id, $module, ProductManageService $service, $config = [])// что это значит класс ProductManageService
в методе в другого класса
{
$this->service = $service;
}
class ProductManageService
{
private $products;
public function __construct(ProductRepository $products)// что это значит класс ProductRepository
в методе в другого класса
{
$this->products = $products;
}
public function create(ProductCreateForm $form)// что это значит класс ProductCreateForm
в методе в другого класса
{}
можете привести пример с созданием классов и методов и привести пример что можно делать а что приведет к ошибке
dima0077, пример из документации ничем не отличается от того кода, который тебе не понятен. Во втором просто больше аргументов и не функция, а методы класса. Остальное - один в один.
Методы ожидают в качестве аргумента объект являющийся экземпляром класса (или наследуемого класса или реализованного интерфейса) указанного в качестве хинтига.
dima0077, в каком смысле что можно? Можно только указанный тип передать, больше ничего не можно.
Тебе же понятен этот код.
class C {}
class D extends C {}
// Это не является расширением класса C.
class E {}
function f(C $c) {
echo get_class($c)."\n";
}
f(new C);
f(new D);
f(new E);
этот понятен но этот
class ProductController extends Controller
{
private $service;
public function __construct($id, $module, ProductManageService $service, $config = [])// что это значит класс ProductManageService
в методе в другого класса
{
$this->service = $service;
}
class ProductManageService
{
private $products;
public function __construct(ProductRepository $products)// что это значит класс ProductRepository
в методе в другого класса
{
$this->products = $products;
}
public function create(ProductCreateForm $form)// что это значит класс ProductCreateForm
в методе в другого класса
{}
нет ссылка на статью
dima0077, тот же самый понятный тебе код, только f не просто функция, а метод класса А
class C {}
class D extends C {}
// Это не является расширением класса C.
class E {}
class A
{
public function f(C $c) {
echo get_class($c)."\n";
}
}
$a = new A();
$a->f(new C);
$a->f(new D);
$a->f(new E);
class Foo {
public function __construct($name) {
$this->name = $name;
}
public function setLink(Foo $link){
$this->link = $link;
}
}
$foo = new Foo('Foo 1');
$bar->setLink($foo);
Дмитрий,
у меня было по другому метод класса ProductController как то связан с классом ProductManageService вот с этим можете привести пример что можно а приведет к ошибке
заранее благодарю