Bu cepten ya da benzeri OOP olduğunu

4 Cevap php

Uzun süre okuma ve test, ama için biliyorum istiyorum. Bu doğru PHP OOP kod veya değil

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;

And now from the file userControl.php I can control the actions. If I want to do something, I can send the action to the instance of the user class: $MyUser->Add($Name, $Password); Is this approach more like a grouped function and not OOP or is it better to use setters and getters?

Bu örnek OOP değilse, o zaman ne yanlış yaptım ve nasıl bu örnek OOP şekilde yapmak gerekiyor?

Tnx

4 Cevap

Bu konuda doğru yolu gitmiyoruz. Ne gerçekten yapmak istediğiniz bu yansıtan yöntemleri ile tek bir kullanıcı, temsil eden bir sınıf Kullanıcı olması.

Wikipedia:

In object-oriented programming, a method is a subroutine that is exclusively associated either with a class (in which case it is called a class method or a static method) or with an object (in which case it is an instance method).

Bir kullanıcı nesnesi azından bunu sağlayan örnek yöntemleri olmalıdır:

  • Veritabanından yükleyin
  • Veritabanına kaydetmek

And a static method to: - Create a user and return a user object.

Ayrıca kullanıcı oluşturulduğunda çağrılacak (PHP4 PHP5 __construct (args) veya User (args)) bir yapıcı yöntemine sahip olmalıdır. Bu muhtemelen bir id veya bir kullanıcı adı veya tanımlayıcı bir şey kabul etmelidir yüzden doğru kullanıcı yükleyebilirsiniz.

Sadelik ve sadece sizin için her şeyi yapıyor değil uğruna, sadece bir kimliği ve bir adla bir kullanıcı nesnesi düşünün. Burada sınıf görünebilir nasıl:

PHP5 varsayarsak:

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

Yeni Kullanıcı ($ id) kullanarak kendi id verilen bir kullanıcı yüklemek, ya da bir verilen User :: ($ isim) oluşturmak için;

Mecazi çarmıha olma riski, ben PHP belirleyiciler ve alıcılar ile rahatsız olmaz.

$MyUser->Add($Name, $Password); garip görünüyor. Böyle bir şey deneyin:

class UserManager {
    public function add(User $user) {
        $sql->do_sql("INSERT INTO users (id, name) VALUES (".$user->getId().", ".$user->getName().")");
    }
    public function delete(User $user) {
        $sql->do_sql("DELETE FROM users WHERE id = ".$user->getId()." LIMIT 1");
    }
    public function show(User $user) {
        return $sql->do_sql("SELECT * FROM users WHERE id = ".$user->getId());
    }
}

ve

class User {
    private $_id;
    private $_name;
    public function getId(){
        return $this->_id;
    }
    public function getName(){
        return $this->_name;
    }
}

Uygun olabilecek bir tasarım modelidir Active Record.

Teknik olarak, ama ya bir sürü kod eksik ya da yöntemler işe olmaz. Her yerde $ sql tanımlamak için görünmüyor. Yinelenen kod ortadan zaman OOP güzelliği gerçekten parlar ve size bütün yöntemler $ sql kullanmak bu yana, bu nasıl ele görmek güzel olurdu. Tam, çalışma, kod olmadan önerileri sağlamak zor.

Burada ne demek istediğimi kısa bir örnektir. Eğer PHP5 herhangi oop özelliklerini kullanarak değil beri PHP4 çakacağım:

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

  function add($data)
  {
    $query = '...query here...';
    $this->sql->query($query);
  }
}

Eğer katı, kurumsal düzeyde kod bazı örnekler kontrol etmek isterseniz, ben çok Zend Framework içinde bazı bileşenlerin bakarak tavsiye ederim.

Thanx! Ben OOP hakkında bazı şey doğru yerde benim zihin değil biliyorum, ben sallamak gerekiyor. Ben yapmak gibi şeyleri neden. Önce şablon motoru kullanabilirsiniz. Kullanıcı sonrası veriler daha sonra bu veri sonrası eylem dosyası sonra. Orada somthing bu actionUser.php:

$op = '';
IF (ISSET($_REQUEST['op'])){
  $op   = ADDSLASHES($_REQUEST['op']);
}

if ($op == 'AddUser'){
 $Name = ADDSLASHES($_REQUEST['Name'])
 $Password = ADDSLASHES($_REQUEST['Password'])
$MyUser->Add($Name, $Password)
}

Sonra sınıf kullanıcı için harekete gönderebilirsiniz.

Kullanıcı Sınıfı litle biraz daha fazla fonksiyonu en var

class User{
private $SQL;

    public function __construct(){
        $this->SQL = SQL::getInstance();
    }

    public Function AddUser ($Name, $Password) {
    $sql_str ="INSERT INTO USER SET Name = '$Name', Password='$Password'";
    $this->SQL->do_sql($sql_str);
    }

    public Function DelUser($UserID){
      $sql_str = "DELETE FROM User WHERE UserID = '$UserID'";
      $sql->do_sql($sql_str);

    }

    public Function Login($Login, $Password){
        $sql_str    = "SELECT * FROM User WHERE Login = '$Login' AND Password = '$Password' ";
        LIST($sql_result, $sql_count) = $this->SQL->do_sql($sql_str);
        if ($sql_count == 1){
            $_SESSION["UserID"]  = $this->SQL->result_strip($sql_result, 0, "AdminUserID");
            $_SESSION["Login"]   = $this->SQL->result_strip($sql_result, 0, "Login");
            $sql_str    = "UPDATE User SET LastLogin = NOW()";
            $this->SQL->do_sql($sql_str);

        }
    }

    public Function Logout(){
        $_SESSION = array();
        if (isset($_COOKIE[session_name()])) {
            setcookie(session_name(), '', time()-42000, '/');
        }
        session_destroy();

    }
}