2012-09-29 3 views
0

나는 여기에서 무슨 일이 일어나고 있는지에 대해 약간 혼란 스럽다. Magento의 모델에 대해 배우려고합니다. 나는 도우미 (카탈로그/카테고리)로부터 돌아 오는 길을 가고 있었고이 메소드 "GetCategories"에 대한 호출을 받았습니다. 나는 여기서 무슨 일이 일어나는지 모른다. 누구나이 코드 조각을 밝힐 수 있다면 크게 감사하겠습니다.getCategories 메서드가 자신을 호출합니까?

getCategories ($parent, 
      $recursionLevel = 0, 
      $sorted = false, 
      $asCollection = false, 
      $toLoad = true  
      ){ 
        $categories = $this->getResource() 
        ->getCategories($parent, $recursionLevel, $sorted, $asCollection, $toLoad); 
        return $categories; 
        } 
+1

이 사이트의 편집 도구로 편안하게 작업하십시오. 또한 다른 사람들이 읽을 필요가 있기 때문에 코드를 들여 쓰기 (나는 당신을 위해 그렇게하지 않았다). 이 웹 사이트는 들여 쓰기 용 공백을 사용하고 있으며, 탭은 잘 작동하지 않습니다. – hakre

+0

@MageNewbie - 조회 "재귀". 자신을 호출하는 메소드와 함수는 컴퓨터 프로그래밍 분야에서 길고 풍부한 역사를 가지고 있습니다. –

답변

0

게시 한 코드에 대해 말하기가 어렵습니다. 두 방법이 모두 같은 이름 (getCategories)을 공유한다고해서 그것들이 같은 클래스 또는 객체라고는 할 수 없습니다. 당신이 밖으로 찾으려면

당신은 비교해야합니다 :

var_dump($this === $this->getResource()); 

그 외에도에서, 따라서, 메소드가 자신을 호출하는 것도 재귀 프로그래밍 재귀에서 일반적입니다. 그러나 그 코드 덩어리의 경우, 그것은 벽을 향해 달릴 것입니다.

기술적으로 말하자면이 예에서는 이 아니며 정확히 동일한 개체 방법 인입니다.

이 답변은 Magento와는 독립적이므로 PHP가 일반적으로 어떻게 작동하는지 알 수 있습니다.

1

@ hakra의 답변에 추가 할 내용이 많지 않습니다. Magento 특정 로직의 일부. Magento 모델로 작업하려면 Magento에는 일반 모델과 자원 모델 (모델에 블록 할당을 호출 할 수있는 모델)이 있습니다.이 모델은 V에 더 많이 연결됩니다. MVC의 부분).

리소스 모델은 DB 관련 논리 만 포함하고 종종 일부 DB 테이블에 연결되므로 해당 테이블과의 CRUD 작업을위한 논리를 포함하는 DB 어댑터로 만들어졌습니다. 따라서 평상시와 같이 smth를 보게 될 것입니다 - 간단 함을 위해서 someMethod은 일반적인 모델의 일부입니다. 그러나 DB 관련 로직을 포함하고 있으므로이 메소드의 모든 구현이 리소스 모델로 이동되었으므로 someMethod 일반 모델에서는 다음과 같이됩니다.

public function someMethod($args) 
{ 
    return $this->getResource()->someMethod($args); 
} 
+0

정말 고맙습니다. :) – MageNewbie

관련 문제