这是OOP或类似OOP

6 php oop

长时间阅读和测试,但我想知道.这是正确的PHP OOP代码,或不

Class User {

  function Add($Name, $Password){
    $sql_str = "INSERT INTO User SET Name = '$Name', Password = '$Password'";
    $sql->do_sql($sql_str);
  }

  function Del($UserID) {
    $sql_str = "DELETE FROM User WHERE UserID = '$UserID'";
    $sql->do_sql($sql_str);
  }

  function Show ($Limit)
    if ($limit > 0){
      $sql_str = "SELECT * FROM User ORDER BY Name LIMIT $Limit";
    }else{
      $sql_str = "SELECT * FROM User ORDER BY Name";
    }
    $result = $sql->do_sql($sql_str);
    for ($i = 0; $i < COUNT($result); $i++){
      $data[$i]['UserID'] = ....
      $data[$i]['Name'] = ....
    }
    return $Data
  }

}
$MyUser = new User;
Run Code Online (Sandbox Code Playgroud)

现在从文件userControl.php我可以控制动作.如果我想做某事,我可以将动作发送到用户类的实例:$MyUser->Add($Name, $Password); 这种方法更像是分组函数而不是OOP,还是使用setter和getter更好?

如果这个例子不是OOP,那么我做错了怎么需要做这个例子的OOP方式呢?

TNX

Ada*_*ard 6

你没有以正确的方式解决这个问题.你真正想要做的是拥有一个代表单个用户的类User,其方法反映了这一点.

来自维基百科:

在面向对象的编程中,方法是一个子程序,它专门与一个类(在这种情况下称为类方法或静态方法)或一个对象(在这种情况下它是一个实例方法)相关联.

用户对象至少应该具有实例方法,使其能够:

  • 从数据库加载
  • 保存到数据库

以及一种静态方法: - 创建用户并返回用户对象.

它还应该有一个构造函数方法(PHP5中的__construct(args)或PHP4中的User(args))在创建用户时调用.这可能应该接受id或用户名或识别的东西,以便它可以加载正确的用户.

为了简单而不仅仅为您做一切,想象一下只有id和名称的用户对象.以下是该类的外观:

假设PHP5:

class User{
    private $id;
    public $name;

    public function __construct($id){
        $this->load($id);
    }

    public function load($id){
        // Do a query to load a user and initialize $id and $name.
    }

    public function save(){
        // Do a query saving $this->id and $this->name to the database.
    }

    public static function create($name){
        // Do a query to create a user with name $name.
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用new User($id)或者创建一个给定的用户来加载用户User::create($name)

有可能被比喻钉死,我不会在PHP中使用setter和getter.


Mik*_*e B 0

从技术上讲是这样,但是您要么缺少大量代码,要么您的方法不起作用。您似乎没有在任何地方定义 $sql 。由于 oop 的优点在消除重复代码时确实大放异彩,并且您在所有方法中都使用了 $sql,所以很高兴看到您如何处理这个问题。如果没有完整的、有效的代码,就很难提供建议。

这是我的意思的一个简短例子。由于您没有使用 PHP5 的任何 oop 功能,我将坚持使用 PHP4:

class User
{
  var $sql;
  function User()
  {
    $this->sql = new DatabaseConnection();
  }

  function add($data)
  {
    $query = '...query here...';
    $this->sql->query($query);
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您想查看一些可靠的企业级代码示例,我强烈建议您查看Zend Framework中的一些组件。