Интересува Type Hinting + interface, добра комбинация ли е за ползване, за да получим едно по добро Dependency или има някой по добър вариант, кой според вас е той ? И ако може да напишете едно примерче и да обясните защо така мислите?
Ако нещо не ви допада във структурата на този код също ако може да обясните защо и какво бихте подобрили?
Ето едно просто примерче (използвам примера, който гоогле дават за DI, но в него не обясняват за type hinting - а).
Първият пример е без interface.
Файл: house.php
-----------
Файл: door.php
------------
Файл: lock.php
При този метод ако сложим обекта Lock, във конструктура на house, то няма как да сработи, все пак използваме type hinting Door
-----------------------
Ето как ще стане чрез интерфейс:
При този вариант, можем да си ползваме и двете инстанции (за разлика от първия метод) и да ги пращаме към конструктура на класа house.
Файл: house.php
-----------
Файл: door.php
------------
Файл: lock.php
------------
Файл: iHouse.php
Ако нещо не ви допада във структурата на този код също ако може да обясните защо и какво бихте подобрили?
Ето едно просто примерче (използвам примера, който гоогле дават за DI, но в него не обясняват за type hinting - а).
Първият пример е без interface.
Файл: house.php
PHP:
<?php
require 'door.php';
require 'lock.php';
class house {
public function __construct(door $value) {
echo $value -> GetValue();
}
}
$Door = new door();
$Lock = new lock();
$House = new house($Door);
-----------
Файл: door.php
PHP:
<?php
class door
{
public function GetValue() {
return 'This is door';
}
}
------------
Файл: lock.php
PHP:
<?php
class lock {
public function GetValue() {
return 'This is get lock';
}
}
При този метод ако сложим обекта Lock, във конструктура на house, то няма как да сработи, все пак използваме type hinting Door
-----------------------
Ето как ще стане чрез интерфейс:
При този вариант, можем да си ползваме и двете инстанции (за разлика от първия метод) и да ги пращаме към конструктура на класа house.
Файл: house.php
PHP:
<?php
require 'iHouse.php';
require 'door.php';
require 'lock.php';
class house {
public function __construct(iHouse $value) {
echo $value -> GetValue();
}
}
$Door = new door();
$Lock = new lock();
$House = new house($Door);
-----------
Файл: door.php
PHP:
<?php
class door implements iHouse
{
public function GetValue() {
return 'This is door';
}
}
------------
Файл: lock.php
PHP:
<?php
class lock implements iHouse {
public function GetValue() {
return 'This is get lock';
}
}
------------
Файл: iHouse.php
PHP:
<?php
interface iHouse {
public function GetValue();
}