类继承问题

Che*_*ung 0 php

我有A.php和B.php

a.php只会

<?php
error_reporting(E_ALL);
ini_set("display_errors",1);
class myClass
{
  function hello()
  {
    return 'hello';
  }  
}
?>
Run Code Online (Sandbox Code Playgroud)

B.php

<?php
error_reporting(E_ALL);
ini_set("display_errors",1);
require_once('/A.php');
$a = new myClass();
testing();

function testing()
{    
    echo $a ->hello();
}
?>
Run Code Online (Sandbox Code Playgroud)

B.php继承A.php,如果我运行B.php,但它显示"致命错误:在非对象上调用成员函数hello()".

所以问题很简单,我怎么能纠正这个问题,但是"$ a = new myClass();" 不在函数内部,因为在.NET世界中可以做到这一点,我相信PHP也是可能的.

还有一个问题是,如果我没有声明私人/公共/受保护,那么A.php中的功能修改是什么?

Pet*_*ley 5

这不是继承. B.php包括 A.php.这意味着所有代码A.php都可用于执行上下文B.php.

继承是一种阶级关系

class A{}

class B extends A{}
Run Code Online (Sandbox Code Playgroud)

B类可以说是从A 继承的.因此,已经形成了一个层次结构.

就像我们人类遗传了父母的特质,类继承的属性他们的父母.因此,根据它们在层次结构中的位置来讨论这些类是常见的.A类是B类的类.B类是A类的类.

但是,您遇到的实际问题(错误消息的来源)是一个范围问题.您可以$a在全局范围内创建,但尝试在函数范围内访问它,在本例中testing().

要解决这个问题的最好办法是通过你的情况下myClass进入testing()

$a = new myClass();
testing( $a );

function testing( $myClassObj )
{    
    echo $myClassObj->hello();
}
Run Code Online (Sandbox Code Playgroud)

并回答你的最后一个问题 - 在PHP5中 - 没有使用访问修饰符显式声明的类成员会隐式public.