在面向对象的php中调用方法

时间:2012-02-02 13:45:48

标签: php oop

我相信这对你们大多数人来说都是一个愚蠢的问题。但是,我已经敲了很长时间。 来自ASP.NET / C#,我现在正在尝试使用PHP。但是整个OOrintation给了我很多时间。

我有以下代码:

<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()函数

有人能发现问题吗?

先谢谢。

2 个答案:

答案 0 :(得分:9)

你的问题在于:

$A = new clsA();

在这里,您要为本地变量 clsA分配新的$A对象。您打算将其分配给属性 $A

$this->A = new clsA();

答案 1 :(得分:1)

作为第一个答案,你也可以通过这种方式将b类扩展到一个类,你可以访问C中的一个类,如下所示:

  <?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/>";
  ?>