2012-07-25 4 views
1

OOP는 처음이지만 PHP는 처음이 아닙니다. 다른 클래스에서 클래스를 초기화하려고합니다.PHP/OOP - 클래스 내에서 클래스 초기화

index.php를

<? 
error_reporting(E_ALL); 
require("classes/memcache.php"); 
require("classes/video_test.php"); 
$videos = new video; 
?> 

video_test.php

<?php 
    class video { 

      private $mcache; 

      public function __construct() { 
      $this->mcache = new MCACHE(); 
      } 

      public static function get_scene($scene_id) { 
      $info = $this->$mcache->get_item("mykey"); 
      } 


    } 
?> 

는 생산 : PHP 치명적인 오류 : $ 사용이하지 않을 때

답변

7

Using $this when not in object context in

에서 개체 컨텍스트에서 할 수 있습니다 ' $ this를 static으로 선언 된 메소드에서 사용하지 마십시오. 그냥 static 키워드를 제거하고 객체 핸들을 통해 방법을 사용하십시오

$vid = new video() 
$vid->get_scene(); 
+0

또한 video_test.php가 필요한 파일 (memcache.php)을로드하기 위해 index.php에 의존하는 것이 바람직하지 않다고 지적합니다. "require_once"를 사용하고 첫 번째 사용 바로 위에 놓습니다. 이 경우 "$ this-> mcache = new MCACHE();"입니다. – N13

+0

감사합니다. alex, 그 트릭을 했어. N13, 나는 너의 충고에도 유의할 것이다. –

1

정적 방법은 당신이 새로운로 만들 클래스가 아닌 객체에 속한다. $ this pseudovariable은 객체가 아닌 클래스를 참조합니다. 이것이 코드가 손상되는 이유입니다. 함수 앞에 static 키워드를 제거하면이 코드를 수정할 수 있습니다. 아니면 정적으로 전체를 다시 정의 할 수

당신이 만든 또 다른 버그 (대신 $ 이런, 그 변수를 초기화하기 위해 $ mcache 정적을 선언하고 정적 메서드를 만들자체 :: 사용하는 것은)입니다 : $ 이 -> $ mcache. 속성에 제대로 액세스하려면 $ this-> mcache을 작성하십시오. 코드가 함수에 정의되지 않은 $ mcache 변수에있는 속성에 액세스하려고했습니다 (액세스하려고 시도했기 때문에 $ this-> null)

-1

그냥 덧붙여 야합니다. 클래스와 인스턴스 사이의 주요 차이점. 정적 메소드 나 속성이 클래스에 속한다는 것은 클래스의 모든 인스턴스가이 하나의 속성을 공유한다는 것을 의미합니다. 반대로 객체 인스턴스에는 고유 한 속성 집합이 있습니다. OOP를 마스터하기 위해서는 이러한 이해가 매우 중요합니다.