我在两个不同的文件上编写了两个类,例如文件classA.php
和classB.php
,写在下面。
文件classA.php
class a {
public function __construct() {
require_once('classB.php');
$classB = new b();
}
}
$classA = new a();
文件classB.php
class b {
public function __construct() {
echo "Hello World!";
}
}
代码正常工作,并输出Hello World!
。 但是,当我这样编写两个类时
class a {
public function __construct() {
class b {
public function __construct() {
echo "Hello World!";
}
}
$classB = new b();
}
}
$classA = new a();
显示错误
致命错误:类声明不能嵌套
哪个,我认为他们两个都应该做同一件事,昨天我发现了有关“任意地点”的信息,但我找不到正确答案。
我只想知道为什么两者都显示不同的结果?还是我不知道的关于include
或require
的事情?
注意
我不是在问require()
和include()
函数之间的区别
答案 0 :(得分:2)
您的答案在the PHP documentation中:
包含文件时,文件包含的代码将继承包含该行的行的可变范围。从那时起,调用文件中该行上可用的任何变量将在被调用文件中可用。但是, 所包含文件中定义的所有函数和类都具有全局作用域 。
因此,与变量不同,require_once
行的位置无关紧要:该类将始终位于全局范围内。
请注意,即使 includes 文件的名称空间也不会应用于 included 文件,因此,included函数和类不仅在全局范围内,而且在根名称空间。
答案 1 :(得分:0)
不允许您在另一个类的定义内定义一个类(除非使用我猜测的新匿名类功能)。
您可以在同一文件中定义多个类,但不能在另一类的代码中定义一个类。
如果使用Composer生成基于类图的自动加载,它将可以正确处理1个文件中定义的多个类。
答案 2 :(得分:-1)
class a {
public function __construct() {
require_once('classB.php');
$classB = new b();
}
}
$classA = new a();
与
不同class a {
public function __construct() {
class b {
public function __construct() {
echo "Hello World!";
}
}
$classB = new b();
}
}
此willl也会起作用:
require_once('classB.php');
class a {
public function __construct() {
$classB = new b();
}
}
$classA = new a();
如果您使用include()
或require()
。这意味着您可以使用它们的属性,例如变量,方法等。
示例:您有vars.php
个文件
<?php
$color='red';
$car='BMW';
?>
然后您可以像这样在html中使用$color
和$car
>
<h1>Welcome to my home page!</h1>
<?php include 'vars.php';
echo "I have a $color $car.";
?>
class类似于属性。您可以通过创建实例来使用。 您将从source
了解更多信息