Risposte:
In Magento 2 l' Varien_Object
equivalente è \Magento\Framework\DataObject.
Il nome della classe è stato cambiato da Object a DataObject perché object è una parola riservata in PHP 7
. Quindi potresti usare qualcosa come:
$obj = new \Magento\Framework\DataObject();
$obj->setItem($item);
Aggiornamento 2018
Questa risposta intendeva illustrare una risposta alla domanda originale nel modo più conciso possibile e non nel contesto di un esempio di codice reale. Sebbene abbia risposto alla domanda, \Magento\Framework\DataObject
è la nuova Varien_Object
, l'implementazione non era al 100% in linea con le migliori pratiche di Magento 2. Come sottolineato da @MatthiasKleine, la migliore pratica di Magento 2 per creare oggetti nel tuo codice è quella di usare Magentos DI framework per iniettare una factory nella tua classe tramite il costruttore e usarla per creare il tuo oggetto. Con questo in mente, l'utilizzo di DI per creare un DataObject nel proprio codice dovrebbe essere simile al seguente:
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
, direi che non vi è alcun vantaggio nell'iniezione di dipendenza e nelle fabbriche. Dopotutto è solo un array glorificato.
$obj->setData($item)
invece di In $obj->setItem($item)
questo modo sarai in grado di ottenere qualsiasi valore di campo $obj
usando direttamente il metodo. Mi piace $obj->getName()
ecc.
Invece di creare l'oggetto con "nuovo", è necessario utilizzare DI (Dependency Injection) per iniettare la classe Factory e utilizzare tale factory per creare nuove istanze di 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();
}