2012-02-02 5 views
1

나는 이것이 당신 대부분에게 어리석은 질문처럼 보일 것이라고 확신한다. 그러나, 나는 그것에 대해 꽤 오랫동안 내 머리를 두 드렸습니다. ASP.NET/C#에서 PHP를 사용하려고합니다. 그러나 전체 OO 인쇄는 나에게 힘든 시간을줍니다.객체 지향 PHP에서 메소드 호출하기

<html> 

<head> 
</head> 
<body> 

<?php 

echo "hello<br/>"; 

class clsA 
{ 
    function a_func() 
    { 
     echo "a_func() executed <br/>"; 
    } 
} 

abstract class clsB 
{ 
    protected $A; 

    function clsB() 
    { 
     $A = new clsA(); 
     echo "clsB constructor ended<br/>"; 
    } 
} 


class clsC extends clsB 
{ 

    function try_this() 
    { 
     echo "entered try_this() function <br/>"; 
     $this->A->a_func(); 
    } 
} 

$c = new clsC(); 

$c->try_this(); 

echo "end successfuly<br/>"; 
?> 

</body> 
</html> 

내 간단한 이해하려면이 코드는 다음과 같은 라인을 초래한다 :

안녕하세요

clsB 생성자

입력 try_this을 종료

나는 다음과 같은 코드가 있습니다() 함수

a_func는()가 'a_func'를 실행하지 않습니다,

그러나

을 실행, 내가 가진 전부입니다

안녕하세요

clsB 생성자가

입력 try_this 종료() 함수

누구든지 문제를 발견 할 수 있습니까?

고맙습니다.

답변

9

의 문제가이있다 :

$A = new clsA(); 

를 여기, 당신은 지역 변수$A에 새 clsA 객체를 할당하고 있습니다.

$this->A = new clsA(); 
1

첫 번째 답변으로뿐만 아니라 당신이처럼 클래스에 당신이 C에서 클래스를 액세스 할 수있는이 방법을 B 클래스를 확장 할 수 있습니다 : 당신이 할 의미하는 것은 재산$A에 할당했다 아래 :

이 경우
<?php 

    echo "hello<br/>"; 

    class clsA{ 
     function a_func(){ 
      echo "a_func() executed <br/>"; 
     } 
    } 

    abstract class clsB extends clsA{ 
     function clsB(){ 
      echo "clsB constructor ended<br/>"; 
     } 
    } 


    class clsC extends clsB{ 
     function try_this(){ 
      echo "entered try_this() function <br/>"; 
     self::a_func(); 
     } 
    } 

    $c = new clsC(); 

    $c->try_this(); 

    echo "end successfuly<br/>"; 
    ?> 
+0

, 그는'could'하지만 아무도 그가 아마도 클래스 A로,하고 싶어 계층 구조 : – tim

+1

이 @Alexandrew 사실에서 B와 C와 아무 상관이 무엇인지 알고 있지만, 단지 대답을주고 :-) –

+0

그래, 그게 무슨 뜻인지. 나는 그게 어리석은 짓과 관련이 있다는 것을 알았습니다. 그것은 효과가 있었다. 대단히 감사합니다. – dsb

관련 문제