我有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中的功能修改是什么?
这不是继承. 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.