我知道php不能嵌套类,但是如果两个类都在两个文件中,它似乎可以:
MainClass.php:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
class mainclass
{
private $var;
public function __construct()
{
require_once ('subclass.php');
$subinstant = new subclass();
}
}
$maininstant = new mainclass();
subclass.php
<?php
ini_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);
class subclass
{
public function __construct()
{
$this->var="this-var\n";
echo $this->var;
$test="test in construct\n";
echo $test;
function testvar()
{
//$this->var = "this-var in fun\n";
//echo $this->var;
$funtest="test in fun\n";
echo $funtest;
}
testvar();
}
}
没有错误输出,结果如预期。我只是不理解require_once
,它似乎会将代码包含在subclass.php
中,那么与直接在同一位置直接写相比有什么区别?< / p>
还有什么,如何访问$var
中的变量testvar()
? (使用尽可能多的方法),谢谢!
答案 0 :(得分:2)
require_once
不包括当场其他类的代码。 require
,require_once
,include
和include_once
的行为是唯一的:它“离开”当前对象并将所请求文件中的代码“合并”到全局范围
这意味着,你认为是这个
class mainclass
{
private $var;
public function __construct()
{
require_once ('subclass.php');
$subinstant = new subclass();
}
}
PHP解释器实际上看到了这一点(当你创建mainclass
的实例时):
class mainclass
{
private $var;
public function __construct()
{
$subinstant = new subclass();
}
}
class subclass
{
public function __construct()
{
$this->var="this-var\n";
echo $this->var;
$test="test in construct\n";
echo $test;
function testvar()
{
//$this->var = "this-var in fun\n";
//echo $this->var;
$funtest="test in fun\n";
echo $funtest;
}
testvar();
}
}
$maininstant = new mainclass();
正如@Federkun在这篇文章的评论中指出的那样,它实际上写在docs:
但是,包含文件中定义的所有函数和类都具有全局范围。
答案 1 :(得分:1)
是的,您可以在单个文件中定义任意数量的类,只需要提供不同的名称,因为所有类都在相同的范围内。您可以使用$ this-&gt; var访问$ var,但是您无法访问另一个类中某个类的私有变量,也无法使用对象访问。 因此,在您的代码中,您无法访问$ var