代码之家  ›  专栏  ›  技术社区  ›  Irvan Hilmi

PHP包含或需要类和原始的书面类有什么不同?

  •  2
  • Irvan Hilmi  · 技术社区  · 7 年前

    我已经用两个不同的文件编写了两个类,例如file classA.php 和 classB.php ,文件写在下面。

    文件 克拉索

     class a {
          public function __construct() {
               require_once('classB.php');
               $classB = new b();
          }
     }
     $classA = new a();
    

    文件 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() 功能

    3 回复  |  直到 7 年前
        1
  •  2
  •   miken32 Amit D    7 年前

    你的答案在 the PHP documentation :

    当包含一个文件时,它包含的代码会继承包含该文件所在行的变量范围。调用文件中该行可用的任何变量都将在被调用文件中从该点向前可用。然而, 包含文件中定义的所有函数和类都具有全局范围 .

    因此,不同于变量,无论 require_once 行是:类将始终在全局范围内。

    请注意,即使是 包括 文件未应用于 包括 文件,因此所包含的函数和类不仅在全局范围内,而且在根命名空间中。

        2
  •  0
  •   thinsoldier    7 年前

    不允许在另一个类的定义中定义类(除非使用新的匿名类功能,我猜)。

    可以在同一个文件中定义多个类,但不能在另一个类的代码中定义一个类。

    如果使用composer生成基于类映射的自动加载,它将正确地使用在1个文件中定义的多个类。

        3
  •  -1
  •   Dhruv Raval    7 年前
    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();
        }
    }
    

    这也将起作用:

    require_once('classB.php');
    class a {
        public function __construct() {         
             $classB = new b();
        }
    }
    $classA = new a();
    

    如果你使用 include() 或 require() . 这意味着您可以使用它们的属性,如变量、方法等。

    示例:您已经 vars.php 文件

    <?php
    $color='red';
    $car='BMW';
    ?>
    

    然后你可以用 $color 和 $car 在这样的HTML中:

    <h1>Welcome to my home page!</h1>
      <?php include 'vars.php';
         echo "I have a $color $car.";
      ?>
    

    类类似于属性。您可以通过创建该实例来使用。 你会从中得到更多的想法 source

    推荐文章