Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-对象的方法_Php_Oop_Magento_Magento 1.7 - Fatal编程技术网

PHP-对象的方法

PHP-对象的方法,php,oop,magento,magento-1.7,Php,Oop,Magento,Magento 1.7,我是一名Java开发人员,试图理解这种PHP行为。我已经执行了以下方法: error_log(get_class($a) . "\n", 3, "c:\my-errors.log"); error_log(print_r(get_class_methods($a), true) . "\n", 3, "c:\my-errors.log"); 哪个印刷品 Mage_Catalog_Model_Product Array ( [0] => getStoreId ...

我是一名Java开发人员,试图理解这种PHP行为。我已经执行了以下方法:

error_log(get_class($a) . "\n", 3, "c:\my-errors.log");
error_log(print_r(get_class_methods($a), true) . "\n", 3, "c:\my-errors.log");
哪个印刷品

Mage_Catalog_Model_Product
Array
(
    [0] => getStoreId
    ...
    [90] => getWeight
    [91] => getOptionInstance
    [92] => getProductOptionsCollection
    [93] => addOption
    [94] => getOptionById
    [95] => getOptions
    [96] => getIsVirtual
    ...
    [182] => flagDirty
)
但下一行执行的方法(没有错误)显然不在我首先打印的方法列表中:

$a->getOption()
那么,这怎么可能呢?我怎么知道一个对象的所有方法?有没有办法知道哪个文件将执行“下一行代码”——因为整个项目中都有几个“getOption”函数,我无法确定将执行哪一个

也许这可以帮助你,我正在使用Magento 1.7,我正在讨论的代码是

\app\code\core\Mage\Bundle\Model\Product\Type.php@shakeSelections

非常感谢

您要查看的PHP信息是。短版本-如果在PHP对象上调用不存在的方法,则调用
\u call
方法,使PHP开发人员有机会实现元编程功能

你感兴趣的Magento特性是神奇的setter和getter。从
Varien_对象
(通常是模型和块)继承的Magento对象具有神奇的
get
set
方法,使用上述
\u调用
方法实现

您可以使用

$array = $object->getData();
这个数组可能看起来像

array(
  'foo'           =>'bar',
  'another_field' =>'baz'
)
您还可以访问
foo
另一个_字段
的值,并调用前面提到的magic getter

echo $this->getFoo();
echo $this->getAnotherField();
您还可以使用magic
setter设置新值

$this->setFoo('no longer bar');
$this->setAnotherField('no longer baz');
二传手也可以连锁

$this->setFoo('again!')->setAnotherField('back to baz');
如果未设置数据属性,getter将返回
null
。也就是说只要你看到有人打电话给你

$object->get...
$object->set...
返回的可能来自真实方法,也可能来自神奇的数据设置和获取工具