Jawaban:
Dalam Magento 2 yang Varien_Object
setara adalah \Magento\Framework\DataObject.
Nama kelas berubah dari Object ke DataObject karena objek adalah kata reserved di PHP 7
. Jadi Anda bisa menggunakan sesuatu seperti:
$obj = new \Magento\Framework\DataObject();
$obj->setItem($item);
Perbarui 2018
Jawaban ini dimaksudkan untuk menggambarkan jawaban pertanyaan awal dengan cara yang sesingkat mungkin dan tidak dalam konteks contoh kode nyata. Meskipun menjawab pertanyaan, \Magento\Framework\DataObject
apakah ini baru Varien_Object
, implementasinya tidak 100% sejalan dengan praktik terbaik Magento 2. Seperti @MatthiasKleine tunjukkan, Magento 2 praktik terbaik untuk membuat objek dalam kode Anda adalah dengan menggunakan kerangka Magentos DI untuk menyuntikkan pabrik ke kelas Anda melalui konstruktor dan menggunakan pabrik itu untuk membuat objek Anda. Dengan mengingat hal itu, menggunakan DI untuk membuat DataObject dalam kode Anda sendiri akan terlihat seperti ini:
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
, saya berpendapat bahwa tidak ada manfaat dalam injeksi ketergantungan dan pabrik. Bagaimanapun, ini hanyalah array yang dimuliakan.
$obj->setData($item)
daripada $obj->setItem($item)
dengan cara ini Anda akan bisa mendapatkan nilai bidang $obj
menggunakan metode secara langsung. Seperti $obj->getName()
dll.
Alih-alih membuat objek dengan 'baru' Anda harus menggunakan DI (Dependency Injection) untuk menyuntikkan kelas Factory dan menggunakan pabrik itu untuk membuat instance baru dari 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();
}