【问题标题】:Why in OOP you do everything in objects? [closed]为什么在 OOP 中你在对象中做所有事情? [关闭]
【发布时间】:2013-05-03 06:04:15
【问题描述】:

我们已经开始与 PHP 开发人员合作,我查看了他的代码,从我的角度来看,写这样的东西是浪费墨水。我个人不做OOP。

他从来没有回答过这个问题,懂 OOP 的人可以解释一下。

在文件 inc/path.php 中,您可以使用不同的变量来定义 class Path 文件和文件夹的路径

class Path
{
    var $path_cnfg = null;

    /* URLs */
    var $url_css = '';//for css url
    var $url_js = '';//for javascript url
    var $url_img = '';//for image url

    /* Paths */
    var $path_inc = '';//inc directory path 
    var $path_img = '';//image path


    function Path()
    {
        $this->path_cnfg = new Config();

        /* Setting URL(s)  */

        $this->url_css = $this->path_cnfg->base_url.'assets/css/';
        $this->url_js = $this->path_cnfg->base_url.'assets/js/';
        $this->url_img = $this->path_cnfg->base_url.'assets/img/';

        /* Setting Path(s) */

        $this->path_inc = $this->path_cnfg->root_path.'/inc/';
        $this->path_img = $this->path_cnfg->root_path.'/img/';
    }
}

A.类路径中方法Path的用途是什么?

function Path()
{
    $this->path_cnfg = new Config();

    /* Setting URL(s)  */

    $this->url_css = $this->path_cnfg->base_url.'assets/css/';
    $this->url_js = $this->path_cnfg->base_url.'assets/js/';
    $this->url_img = $this->path_cnfg->base_url.'assets/img/';

    /* Setting Path(s) */

    $this->path_inc = $this->path_cnfg->root_path.'/inc/';
    $this->path_img = $this->path_cnfg->root_path.'/img/';
} 

B.在 obj.php 中,您将变量从对象 $path 转移到数组 $data

$data['path_img'] = $path->path_img;//Assign image directory path
$data['path_root'] = $config->root_path;//Assign root path
$data['url_base'] = $config->base_url;//Assign base url
$data['url_css'] = $path->url_css;//Assign css directory path
$data['url_js'] = $path->url_js;//Assign javascript directory path
$data['url_img'] = $path->url_img;//Assign url for image

让类 Path 超过定义数组 $data 并正确使用它的目的是什么?为什么我们需要通过所有这些方法和对象来获取我们最初可以在 6 行代码中定义的相同变量($data)。 例如

$data["path_img"] = $config->base_url . "assets/img/";
...
$data["url_css"] = $config->base_url . "/assets/css/"
$data["url_js"] = $config->base_url . "assets/js/"
$data["url_img"] = $config->base_url . "assets/img/"

【问题讨论】:

  • 阅读手册和/或任何基本的 OOP 教程。您在这里期待什么样的答案?
  • 为什么我们需要通过所有这些方法和对象来获取我们最初可以在 6 行代码中定义的相同变量 ($data)。
  • 这是旧代码。 Path这里是构造函数,不是正常调用的方法。
  • 是的,我发现现在在 php 构造函数中应该像这样定义 __construct() 在类的顶部。
  • OOP 代表“面向对象编程”,所以它当然是用对象完成的。但是您也可以使用辅助函数。而当一个项目达到一定水平时,你需要进行OOP,否则很难跟踪所有内容。

标签: php oop object


【解决方案1】:

在将数据和行为封装到类中时,您选择了面向对象编程,其实例可以很好地映射到您要解决的问题。

不是每个问题最好用对象来解决。还有其他风格的编程 - 函数式和声明式 - 也很好。我所知道的大多数科学编程都是使用函数式或过程式语言完成的,而不是对象。

与函数式风格相比,面向对象的语言可能比较冗长。

如果 OOP 确实很好地解决了您的问题,那么您无需使用对象进行编程。

我对 PHP 中的对象了解不多,但我猜想它们是事后才想到的。我不会在面向对象编程的前五种语言中考虑它。

也许问题与您的关系不亚于实现或语言。如果您不习惯从对象的角度思考,这可能看起来很奇怪。

【讨论】:

  • 我并没有考虑确定的对象。我知道,如果您不仅可以在使用代码设计类时看到 3d 或 2d 的对象,那么它可以让事情变得更清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 2019-05-20
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 2011-01-05
相关资源
最近更新 更多