带有命名空间与 oop 的 php 过程

标签 php oop class namespaces procedural

据我所知,OOP 与 PHP 中的过程编程的最大优势是函数名称的分离(命名空间的一种)。

所以现在当我们从 5.3 版开始有了命名空间时,您怎么看 - 对于大多数情况(中​​小型网站),当我们需要快速且结构化的代码时,使用命名空间 + 过程式编程比定义具有显着优势并用 OOP 编写。

优点:

  • 结构化
  • 更快的代码/开发
  • 同样,我们可以在以“_”开头的命名空间中定义类似私有(private)函数的东西,因为我们知道我们不需要使用它们
  • 等..

代码示例:

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;
}

用法:

$user_id = 5;
User\setPassword($user_id);

我征求意见。我知道这只是开发人员的风格,但也许我遗漏了一些东西。

附言。对于大多数情况(中​​小型网站)- 我的意思是,当您为主要是 1 次开发的客户制作网站时,从长远来看会进行一些功能改进。

最佳答案

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

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

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

在代码中看到它肯定更有用(特别是如果您使用具有代码完成功能的 PHP ide):

echo "Hello, {$someDataObject->name}!";

比这个:

echo "Hello, " . $row['name'] . "!";

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

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

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

关于带有命名空间与 oop 的 php 过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7766392/

相关文章:

oop - Scala 的模式匹配是否违反了开放/封闭原则?

Python 多处理类静默失败

php - 如何从前一个div中获取隐藏的输入值

php - 一段时间后自动刷新 JavaScript 功能停止工作

php - HTML 输入值变化

c++ - 为什么我的按钮类项目共享相同的 lambda 函数?

c++ - 进行顺序比较的优雅方式 (C++)

php - 将 PHP 的 password_verify 转换为 Ruby on Rails

php - php如何输出到屏幕+使用mysql在屏幕上显示值?

class - OOP 术语 : class, 属性、特性、字段、数据成员