Odpowiedzi:
W Magento 2 Varien_Object
odpowiednikiem jest \Magento\Framework\DataObject.
Nazwa klasy została zmieniona z Object na DataObject, ponieważ obiekt jest słowem zastrzeżonym w PHP 7
. Więc możesz użyć czegoś takiego:
$obj = new \Magento\Framework\DataObject();
$obj->setItem($item);
Aktualizacja 2018
Ta odpowiedź miała na celu zilustrowanie odpowiedzi na pierwotne pytanie w możliwie najbardziej zwięzły sposób, a nie w kontekście prawdziwego kodu. Mimo że odpowiedział na pytanie, \Magento\Framework\DataObject
jest nowy Varien_Object
, wdrożenie nie było w 100% zgodne z najlepszą praktyką Magento 2. Jak wskazał @MatthiasKleine, najlepszą praktyką Magento 2 do tworzenia obiektów w kodzie jest użycie frameworku Magentos DI, aby wstrzyknąć fabrykę do klasy za pomocą konstruktora i użyć tej fabryki do stworzenia obiektu. Mając to na uwadze, użycie DI do utworzenia obiektu DataObject we własnym kodzie powinno wyglądać mniej więcej tak:
namespace My/Module;
class Example {
private $objectFactory;
public function __construct(
\Magento\Framework\DataObjectFactory $objectFactory
) {
$this->objectFactory = $objectFactory;
parent::__construct();
}
public function doSomething($item)
{
$obj = $this->objectFactory->create();
$obj->setData('item', $item);
//or
$obj->setItem($item);
}
}
DataObject
twierdzę, że zastrzyk zależności i fabryki nie przynoszą żadnych korzyści. W końcu to tylko uwielbiony zestaw.
$obj->setData($item)
zamiast tego. W $obj->setItem($item)
ten sposób będziesz mógł uzyskać dowolną wartość pola $obj
bezpośredniego użycia metody. Jak $obj->getName()
itp.
Zamiast tworzyć obiekt za pomocą „nowego” należy użyć DI (wstrzykiwanie zależności) w celu wstrzyknięcia klasy Factory i użyć tej fabryki do utworzenia nowych instancji DataObjects.
/**
* @var \Magento\Framework\DataObjectFactory
*/
private $dataObjectFactory;
public function __construct(
// ...
\Magento\Framework\DataObjectFactory $dataObjectFactory
) {
parent::__construct();
$this->dataObjectFactory = $dataObjectFactory;
}
public function yourCode()
{
$dataObject = $this->dataObjectFactory->create();
}