2011-04-01 14 views
6

Tengo el siguiente código:¿Cómo aprendo los métodos a los que se puede acceder para ciertos objetos?

$_productCollection = Mage::getResourceModel('catalog/product_collection') 
->addAttributeToSelect(array('name', 'price', 'small_image', 'status'), 'inner') 
->addCategoryFilter(Mage::getModel('catalog/category')->load($catid)); 
$_helper = $this->helper('catalog/output'); 
foreach ($_productCollection as $_product): 
    echo $_product->getProductUrl(); 
endforeach 

Quiero aprender cómo descubrir los métodos que puedo usar en un objeto.

Por ejemplo $ _product-> getProductUrl() está utilizando el método getProductUrl() para obtener la url, pero necesito un precio y no tengo idea qué método llama eso. Usar print_r no proporciona suficiente información para que descubra cuáles son. Supongo que están en controladores que se encuentran en el núcleo MAGE. Tengo error en el comercio y me he cansado de mirar: http://docs.magentocommerce.com/ Pero a veces me siento perdido.

¿Alguien conoce un buen tutorial sobre esto o puede darme instrucciones para resolver esto?

Respuesta

17

En primer lugar, en los modelos y bloques, con cualquier método o una getsetpuede ser en realidad un método mágico que está tirando de la matriz del objeto _data. Puede ver todos los datos en un objeto como éste

var_dump($object->getData()); 

Así que si esta matriz había una clave denominada some_data, se podría llamar un método denominado getSomeData

echo $object->getSomeData(); 

recordar, sin embargo, algunos métodos tendrán métodos reales que comienzan con get y set, por lo que siempre verifique la definición de la clase.

En segundo lugar, puede utilizar las funciones de reflexión PHP (o el más completo, pero complicada PHP API Reflection Clase) para ver qué clase de un objeto, y luego obtener una lista de los métodos de esa clase

En primer lugar, utilizar get_class para obtener el nombre de la clase de un objeto.

$class_name = get_class($object); 

Luego, pase que get_class_methods Para obtener una lista de todos los métodos que se puede llamar en un objeto

$class_name = get_class($object); 
$methods = get_class_methods($class_name); 
echo "Methods for class $class_name \n<br />\n"; 
foreach($methods as $method) 
{ 
    var_dump($method); 
} 

Esto le dará una lista de todos los métodos de la clase. A continuación, puede usar la pestaña Class/URI Lookup de la falla de Commercebug para poner a cero rápidamente en qué archivo se define una clase para ver las definiciones del método. Recuerde, algunos métodos se definirán en las clases antecesoras. Invertir el tiempo para aprender un IDE o a program like ctags bien vale la inversión, y le permitirán pasar rápidamente a definiciones de clases individuales.

+2

+1 para aprender a utilizar un IDE adecuado (prefiero Netbeans), que le ayudará a entender el diseño orientado a objetos de Magento infinitamente más rápido que la piratería en torno a un "tonto" editor de texto, ** especialmente ** cuando se combina con depuración en vivo con xdebug. –

+0

+1 para IDE también, la jerarquía de objetos profundos de Magento hace que la herencia de clase de navegación a través de la salida impresa sea una tarea ingrata. Si estás en un proyecto de Magento, entonces realmente estás en Zend Framework, así que Zend_Debug :: dump ($ object-> getData()); también es [su amigo] (http://framework.zend.com/manual/en/zend.debug.dumping.html). – benz001

+1

puedes simplemente print_r (get_class_methods ($ object)) –

4

Aquí es una dirección simple de encontrar los archivos de clases: -

1. Colección

$_productCollection = Mage::getResourceModel('catalog/product_collection') 

El código anterior significa que estamos llamando a la clase de recogida del producto. El archivo de clase se puede encontrar en: -

aplicación \ code \ core \ Mage \ Catalog \ Model \ Resource \ Eav \ Mysql4 \ Product \ Collection.php

En Collection.php se encuentra la siguiente clase: -

class Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection 
    extends Mage_Catalog_Model_Resource_Eav_Mysql4_Collection_Abstract 

lo tanto, su función requerida puede estar en Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection clase.

Si no está allí, entonces puede ser de la clase padre, es decir, Mage_Catalog_Model_Resource_Eav_Mysql4_Collection_Abstract

2. Modelo

Del mismo modo,

$_product = Mage::getModel('catalog/product') 

Para el código anterior, el archivo de clase es: -

aplicación \ code \ core \ Mage \ Catalog \ Model \ Pro duct.php

3. Ayudante

Para archivo de ayuda,

$_helper = $this->helper('catalog/output'); 

El archivo de ayuda anterior es: -

aplicación \ code \ core \ Mago \ Catálogo \ Helper \ Output.php

4. Finalmente

Por último, el uso de un IDE como Eclipse o Netbeans le ayudará a aprender y escribir código de forma rápida y eficiente.

0

Soy un novato total, pero utilicé la información en esta página para obtener todos los métodos disponibles para un determinado objeto y enviarlos a un registro.

Por ejemplo, la category_collection:

$collection = Mage::getResourceModel('catalog/category_collection'); 


    Mage::log(
      "Methods for class ".get_class($collection)." ".print_r(get_class_methods($menu),true), 
      null, 
      'log_name.log' 
      ); 

    $parent = get_parent_class($collection); 

    while ($parent) { 
     Mage::log(
      "Methods for parent ".$parent." ".print_r(get_class_methods($parent),true), 
      null, 
      'log_name.log' 
      ); 
      $parent = get_parent_class($parent); 
    } 
Cuestiones relacionadas