Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php oop-每个类都有不同的文件?进口包装?等_Php_Oop - Fatal编程技术网

php oop-每个类都有不同的文件?进口包装?等

php oop-每个类都有不同的文件?进口包装?等,php,oop,Php,Oop,我习惯于使用C#/Java/Python等语言,其中每个类都有自己的文件,对于类要查看其他类,您需要导入包含这些类的包。这在php中是如何工作的?文档向您展示了如何创建类,但我不明白它是如何在php上下文中组合在一起的。我知道include语句,它基本上将文件粘在一起。想象一下,您一直在一个名为myObject.PHP的文件中用PHP创建对象 <?php class myObject { public function __construct() {

我习惯于使用
C#
/
Java
/
Python
等语言,其中每个类都有自己的文件,对于要查看其他类,您需要导入包含这些类的包。这在
php
中是如何工作的?文档向您展示了如何创建类,但我不明白它是如何在
php
上下文中组合在一起的。我知道include语句,它基本上将文件粘在一起。

想象一下,您一直在一个名为myObject.PHP的文件中用PHP创建对象

<?php

  class myObject
  {
    public function __construct()
    {
      echo "Hello, World";
    }
  }

?>

在另一个文件中,您希望使用该对象(我们称之为myfile.php)。您必须包括您的对象-如下所示:

<?php

  include("myObject.php");

  $intance = new myObject();

?>


非常简单。

在PHP中,您可以通过各种方式完成,编译器不会限制您

您可以在1个文件中有1个类,在1个文件中有5个类,在多个文件中有1个类,使用include

但通常情况下,它仍然是一个文件中的一个类,如果你有许多小类,你也可以将它们放在一个文件夹中


当使用相同的名称在一个文件中创建一个类时,您可以设置类自动加载,这样您就不需要编写包含项。

您可以使用u autoload

function __autoload($class_name) {
    include 'classes/'.$class_name . '.php';
}
因此,将每个类放在classes文件夹中自己的文件中。当您想要使用该类时,它将包含它。更多信息:

更新:当我回答这个问题时,它是完全有效的。现在它仍然有效,但请记住PHP.net自那时起就说过:

为客户提供了更灵活的选择 自动加载类。因此,使用_autoload()是非常必要的 不鼓励,将来可能会被弃用或删除

最简单的方法:

  • 在“classes”目录中定义类
  • 初始化应用程序,如下所示
  • 用带有.php后缀的小写类名命名类文件名(MyClass=>classes/MyClass.php)
初始化代码:

set_include_path ( "./classes" );
spl_autoload_register ();

//class is automatically loaded from ./classes/myclass.php
$object_instance = new MyClass ();

从PHP 5.3.0开始,建议您使用spl_autoload_register()函数,因为据说u autoload()在将来某个时候会被弃用

使用此功能的简单方法:

1) 将每个类文件放入“类”文件夹中

2) 在spl_autoload_register()中运行一个匿名函数,该函数指定类文件夹:

spl_autoload_register(function ($class) {
    include 'classes/' . $class . '.php';
});

现在,当您尝试使用尚未在代码中定义的类时,它将在给您一个错误之前最后一次检查该类文件夹。

可能重复(tipp)搜索phpper中的自动加载和代码约定。通常,我发现将每个类放在自己的文件中是非常明智的。。。但是使用自动加载器而不是java的import@middaparka:就在前几天,我成了一个完全脱离主题(虽然只是短暂的)讨论的主题。@middaparka:开始讨论的评论被标记删除,但是在meagar的回复中可以找到上下文残留。除非你需要管理一个比你的代码长的包含列表。@Mchl:哦,这很简单,将include放在自己的include文件中并包含它:PAlso看一看:这很酷,但当您希望自己的自动加载器具有自己的名称时,最好使用它,如示例#1所述:在这种情况下#自动加载器就足够了。您不能将一个类拆分为多个文件。例如,请参见此处: