Php 全局变量的使用不起作用
这是始终首先被调用的类和函数的全局变量Php 全局变量的使用不起作用,php,magento,global-variables,global,Php,Magento,Global Variables,Global,这是始终首先被调用的类和函数的全局变量 private $product_sku; public function indexAction(){ $request = $this->_getValidRequest(); global $product_sku; if ($this->flag == FALSE) { $product = Mage::getModel('catalog/product')->loadByAttribute('sku',
private $product_sku;
public function indexAction(){
$request = $this->_getValidRequest();
global $product_sku;
if ($this->flag == FALSE) {
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $product_sku);
$product_sku = $request['sku'];
}
else {
$product = Mage::getModel('catalog/product')->loadByAttribute('printed_order_number', $request['pon']);
$product_sku = $product->getSku();
}
// here I call the other function
}
和另一个使用全局变量的函数
public function showPopUpInProductViewPageAction(){
$request = $this->_getValidRequest();
$product = Mage::getModel('catalog/product')->loadByAttribute('sku', $GLOBALS['product_sku']);
Mage::log($GLOBALS['product_sku']); // logging $product_sku to check its value, but it's empty
}
这些不是完整的函数,只是与问题相关的代码
因此,在第二个函数中,$product
对象为空,因为product\u sku
没有值
我不想重复检查标志的代码
我如何像在Java中一样使用它,即-我在类的开头声明变量,在第一个函数中为它赋值(仅一次),然后在类中的任何地方使用该值。正如@Mark Baker所说,$product\u sku在您的场景中不是一个gobal变量
如果要将变量$product_sku的值转换为persit,可以将变量声明为静态,如下所述:
//在类中声明静态属性
公共静态$product_sku=0
//访问静态属性
self::$product_sku
请在下面的位置详细查看static关键字
希望它能对您有所帮助。您需要使用Magento的注册表模式,而不是使用PHP全局文件。您可以在此处找到Magento注册表模式的详细信息
仅仅因为您通过$this
访问某些内容,并不能使其成为全局的。。。。事实上,通过$this
访问它会使它成为一个实例变量或属性。。。。这绝对不是global@MarkBaker-我用一些新的方法更新了我的问题,我尝试过(从我在这里发现的),但也没有帮助…但我不希望它是静态的。我想在第一个函数中给它赋值(整个过程只赋值一次),然后在类中的任何地方使用我想要的值。你可以像self一样重新给它赋值:$product_sku=$request['sku'];在第一个函数中