php命令与命名空间vs oop

Dra*_*lov 6 php oop procedural namespaces class

根据我的理解,OOP与PHP中的过程编程的最大优点是函数名称的分离(命名空间的类型).

所以现在当我们从版本5.3开始拥有命名空间时,你会怎么想 - 对于大多数情况(中​​小型网站),当我们需要快速且结构化的代码时,使用命名空间+原型编程比定义和写入更有意义OOP.

好处:

  • 结构化的
  • 更快的代码/开发
  • 再次,我们可以在命名空间中定义类似私有函数的东西,以"_"开头,知道我们不需要使用它们
  • 等等..

代码示例:

namespace User;

function setPassword ($user_id) {

    $pass = _generatePassword();

    $sql = 'UPDATE `users` SET `password` = '.escape($pass).' WHERE `user_id` = '.escape($user_id);
    $result = mysql_query($sql);


    if (mysql_affected_rows() == 1) return $sql;
    else return $sql;
}

function _generatePassword () {

    $char = '0123456789abcdefghijklmnopqrstuvwxyz';
    $str = '';
    for ($i = 1; $i <= 6; $i++) {
        $str .= $char[mt_rand(0, strlen($char))];
    }

    return $str;
}
Run Code Online (Sandbox Code Playgroud)

用法:

$user_id = 5;
User\setPassword($user_id);
Run Code Online (Sandbox Code Playgroud)

我在征求意见.我知道这只是开发人员的风格,但也许我错过了一些东西.

PS.对于大多数情况(中​​小型网站) - 我的意思是当你为大多数一次开发的客户做网站时,从长远来看有一点功能改进.

dav*_*ell 4

您对 OOP 的思考方式是错误的。如果您试图将 OOP 与过程命名空间仅仅作为组织代码和函数调用的两种不同方式进行比较,那么命名空间肯定会显得更有效。

OOP 的优点不在于组织一个充满功能的对象。这只是将 OOP 类视为充满函数的大“utils”类。OOP 的优点不是组织性的。这是一种完全不同的构建程序的方式,它使您将代码分解成更小的、离散的实体。我在所有 PHP 程序中都使用 OOP,即使是小项目也是如此。

当我做任何访问数据库的项目时(这几乎是现在的一切),OOP 的优势对我来说变得最为明显。我创建小类来对每个数据库表进行建模,然后将这些表中的信息作为对象进行访问。我在所有项目中使用了一些基类,这些基类定义了如何将表映射到对象,因此我不再重新输入或粘贴 mysql 命令。我只使用这些对象,它们继承了从数据库插入、更新和删除所需的所有功能。

在代码中(特别是如果您使用具有代码完成功能的 PHP IDE)在代码中查看这一点肯定更有用:

echo "Hello, {$someDataObject->name}!";
Run Code Online (Sandbox Code Playgroud)

比这个:

echo "Hello, " . $row['name'] . "!";
Run Code Online (Sandbox Code Playgroud)

差异可能不会立即显现出来。这两个示例都是用于打印表列的一行代码。但第二个例子要求我知道我脑子里的列名。第一个示例将列名称作为属性嵌入到类中。我的代码检查器知道所有属性,因此当我编码时,它会在我键入时显示所有属性的列表。

维护课程比您想象的要容易。根据您选择的对象框架,有一些脚本可以从表生成类并使其保持最新。而且我发现,让我的对象类保持最新状态比让数据库更改破坏代码要少得多,因为列名发生了更改,然后我必须在许多地方更新这些列引用。是的,有搜索和替换,但是您是否看到为列更改更新一个文件比更新对 $row['some_column'] 的每个引用的优势?

我希望这有助于回答您的问题。