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_Coding Style - Fatal编程技术网

PHP OOP-需要或扩展

PHP OOP-需要或扩展,php,oop,coding-style,Php,Oop,Coding Style,我想知道以下方面是否有任何主要区别,以及其中一个是否比另一个更“标准”: <?php class Account extends Database { public function myMethod() { // Do something } } ?> 或 干杯: 编辑: 这个问题实际上与我一直遵循的一个教程系列有关,它描述了上述两种方法,但没有任何明确的意义 因此,感谢您对清理这一问题的建设性回答 这两个代码片段甚至都不相等 第一

我想知道以下方面是否有任何主要区别,以及其中一个是否比另一个更“标准”:

<?php

class Account extends Database {

    public function myMethod()
    {
        // Do something
    }

}

?>

干杯:

编辑:

这个问题实际上与我一直遵循的一个教程系列有关,它描述了上述两种方法,但没有任何明确的意义


因此,感谢您对清理这一问题的建设性回答

这两个代码片段甚至都不相等

第一个声明了扩展数据库的帐户,即is-a关系


在第二个代码段中,您只是简单地说您“database.class.php”。。。这与OO无关,也没有定义帐户与数据库之间的is关系。

两者在第一个类中完全不同,一个类被另一个类继承,但在第二个类中,该类仅包含在脚本中

意味着如果扩展派生类中所有可用的公共和受保护方法,并且可以创建派生类的对象,并且可以将方法与派生类的对象一起使用


但是在第二种方法中,类包含在脚本中,需要这个类它自己的方法并独立工作。

第一种方法意味着您创建一个新类,它具有数据库类和您实现的所有功能

第二种方法是创建一个新类,但它没有数据库功能,因为它没有扩展它。若您需要在Account类中访问数据库,则可以在构造函数中创建实例,或者将已创建的实例作为构造函数参数传递


很难说什么更标准,因为这取决于您实际想要实现的目标。

这是两种完全不同的语言结构

您的第一个示例涉及继承。基本上,您已经有一个名为Database的类,但是您希望有一个该类的专用版本来处理帐户。与构建一个全新的Account类并复制/粘贴数据库类中已有的所有功能不同,您只需告诉PHP您希望使用现有的数据库类作为基线。您可以在新的account类中创建任何特定于account的功能,任何与数据库相关的功能都会自动出现。当然,这是假设您可以通过某种方式指定数据库类的定义位置,例如,在类的顶部有一个require声明,或者一个_autoload或spl_autoload_register函数调用,定义查找和定位包含数据库类的文件的方法

在第二个示例中,与数据库相关的代码与Account类完全分离。它们是完全不同的实体,如果您想在Account类中执行任何与数据库相关的操作,您必须显式地实例化该类中的新数据库对象,或者将其作为参数传递给该类或其函数之一


基本上,extends帮助定义类是什么,而require显示类定义或其他代码的存储位置。

用最简单的术语来说:-

需要或包括结构化编程


extends是面向对象的

你现在比较的是苹果和橙色。前一个有用吗?比如说,没有自动装填?这两种结构彼此没有任何关系。我想你看一下:一些基本概念。我想你可能想回顾一下。我会写我通常的关于组合而不是继承的评论,但我认为这可能超出了这个问题的核心。总之,它们无论如何都不一样……谢谢。它实际上来自于教程中列出的一个例子,它让我觉得它们不一样。所以,谢谢你的解释,帮我把事情弄清楚,而不是用枪杀我squad@lethalMango:不客气。我们都必须从某个地方开始。我想你从其他人那里看到的很多反应只是,他们对你在这里提问之前没有查阅extends和require的定义感到有点恼火。那里有很多信息可以找到,而且很容易找到。作为提示,您可以经常转到URL php.net/,该站点会将您重定向到正确的页面。对于语言构造来说,它并不总是完美的工作,但是当给定一个函数名时,它总是非常有效。
<?php

require('database.class.php');

class Account {

    public function myMethod()
    {
        // Do something
    }

}

?>