Réponses:
Dans Magento 2, l' Varien_Object
équivalent est \Magento\Framework\DataObject.
Le nom de la classe a été changé d'Object en DataObject car object est un mot réservé dans PHP 7
. Vous pouvez donc utiliser quelque chose comme:
$obj = new \Magento\Framework\DataObject();
$obj->setItem($item);
Mise à jour 2018
Cette réponse avait pour but d'illustrer une réponse à la question d'origine de la manière la plus succincte possible et non dans le cadre d'un exemple de code réel. Bien qu'elle ait répondu à la question, \Magento\Framework\DataObject
est la nouvelle Varien_Object
, la mise en œuvre n'était pas à 100% conforme aux meilleures pratiques de Magento 2. Comme l'a souligné @MatthiasKleine, la meilleure pratique de Magento 2 pour créer des objets dans votre code est d'utiliser le framework Magentos DI pour injecter une fabrique dans votre classe via le constructeur et utiliser cette fabrique pour créer votre objet. Dans cet esprit, l'utilisation de DI pour créer un DataObject dans votre propre code devrait ressembler à ceci:
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
, je dirais qu'il n'y a aucun avantage à l'injection de dépendance et aux usines. C'est juste un tableau glorifié après tout.
$obj->setData($item)
au lieu de De $obj->setItem($item)
cette façon, vous pourrez obtenir n'importe quelle valeur de champ en $obj
utilisant directement la méthode. Comme $obj->getName()
etc.
Au lieu de créer l'objet avec 'new', vous devez utiliser DI (Dependency Injection) pour injecter la classe Factory et utiliser cette fabrique pour créer de nouvelles instances de 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();
}