Помогите освоить ООП

Статус
В этой теме нельзя размещать новые ответы.
Класс лучше назвать User, у этого класса должны быть методы, например - Delete($idUser)-метод удаляет пользователя из бд по его ID, getID($loginUser) - метод возвращает id пользователя по его логину ну и так далее.И делать публичными эти поля
PHP:
        public $login;
        public $password;
        public $error;
это нарушение принципов ООП. Эти поля $login;
$password;
тут совершенно не нужны,поле $error; должно быть скрыто, и доступ можно получить полю $error через get метод к примеру
PHP:
 getError()
 {
    return $this->error;
 }
Вообще тема ООП настолько огромна, что лучше прочитать несколько книг, посмотреть примеры классов http://pear.php.net/. Потом уже браться за этого монстра - ООП.
 
Скаижте пожалуйста так лучше или нет?
PHP:
<?php
	require_once "register.php";
	if (isset($_POST['submit'])) {
		$mysqli = new mysqli("localhost", "Admin", "udiram04", "oop");
		$user = new User();
		$user->mysqli = $mysqli;
		echo $user->registerUser($_POST['login'], $_POST['password']);
	}
	echo <<<TXT
	<form action = "" method = "post">
	<input type = "text" name = "login" />
	<input type = "password" name = "password" />
	<input type = "submit" name = "submit" />
	</form>
TXT;
?>
PHP:
<?php
	class User {
		public $mysqli;
		public $error;
		public function getError($error) {
			return $this->error = $error;
		}
		public function connectDB() {
			return $this->mysqli;
		}
		public function registerUser ($login, $password) {
			$login = trim(htmlspecialchars($login));
			$password = trim(htmlspecialchars($password));
			if (empty($login) AND strlen($login) > 3) {
				unset($login);
				return $this->getError('Вы не ввели Логин');
			}
			if (empty($password) AND strlen($password) > 6) {
				unset($password);
				return $this->getError('Вы не ввели Пароль');
			}
			if (isset($login) AND isset($password)) {
				//$mysqli = new mysqli("localhost", "Admin", "udiram04", "oop");
				$mysqli = $this->connectDB();
				$isset_login = $mysqli->query("SELECT `login` FROM `reg` WHERE `login` = '".$login."'");
				$arr_isset = $isset_login->fetch_assoc();
				if (!$arr_isset['login'] == "") { 
					return $this->getError("Такой логин существует");
				}
				$mysqli->query("INSERT INTO `reg` (`login`, `password`, `date`) VALUES ('".$login."', '".$password."', UNIX_TIMESTAMP())");
				$id = $mysqli->insert_id;
				$result = $mysqli->query("SELECT * FROM `reg` WHERE `id` = '$id'");
				$arr = $result->fetch_assoc();
				return "Ваш логин: ".$arr['login']."<br />Ваш пароль: ".$arr['password']."<br />Дата регистрации: ".date("d:m:y h:s", $arr['date']);
			}
		}
		public function deleteUser($id_user) {
			$mysqli = $this->connectDB();
			$delete_user = $mysqli->query("SELECT `id` FROM `reg` WHERE `id` = '$id_user'");
			$arr_del_user = $delete_user->fetch_assoc();
			if (empty($arr_del_user['id'])) {
				return $this->getError("Такого пользователя нет");
			}
			else {
				$del_user = $mysqli->query("DELETE FROM `reg` WHERE `id` = '$id_user' LIMIT 1");
				if ($del_user === true) {
					return $this->getError("Пользователь успешно удалён");
				}
			}
		}
	}
?>
 
public function connectDB() {
return $this->mysqli;
}
public function deleteUser($id_user) {
$mysqli = $this->connectDB();

Ты можешь объяснить зачем ты так делаешь?
 
А как правильно? Я просто пробовал по разному сделать функцию подключения но получилось только так
 
malina95
ты положил класс User в файл register.php? Нет ли тут странности?

Зачем это?
PHP:
$login = trim(htmlspecialchars($login));
$password = trim(htmlspecialchars($password));

Это вообще как?
PHP:
if (empty($login) AND strlen($login) > 3) {
      unset($login);
      return $this->getError('Вы не ввели Логин');
}

Метод, который называется connectDB, на самом деле не соединяет тебя с БД, а возвращает линк на соединение, это разные вещи, и называть методы надо сообразно тому, что метод делает.
 
А как правильно? Я просто пробовал по разному сделать функцию подключения но получилось только так
Подожди, я спросил что: "ЗАЧЕМ ты так делаешь"?. Ты мне дословно сказал, как из того анекдота: "Я и лежа пробовал дрова рубить, но не получается, поэтому вот сидя рублю."

Зачем ты это делаешь? В программировании всегда есть этот главный вопрос. Зачастую он важнее "почему", и "как".
 
Я просто пытаюсь научиться писать на ооп, я всё равно этот класс или удалю или если всё получиться напишу на нём регистрацию... Мне нужно разобраться как правильно писать эти функции и как с ними работать
 
Я не знаю почему я именно так делаю, может привычка работы с библиотеками функций...
 
Я просто пытаюсь научиться писать на ооп, я всё равно этот класс или удалю или если всё получиться напишу на нём регистрацию... Мне нужно разобраться как правильно писать эти функции и как с ними работать
Может ты сначала книжки почитаешь? Прежде чем вообще, что либо писать? Пофиг пишешь ты ООП или функционально или процедурно или как либо еще. Ты не понимаешь вообще, что ты пишешь, главное зачем!!
 
Я понимаю что я пишу, а на вопрос зачем я могу лишь в сотый раз ответить... " Я хочу научиться писать на ООП или хотябы понимать написанное на ООП "
 
Это что такое?
PHP:
        public $mysqli;
        public $error;
        public function getError($error) {
            return $this->error = $error;
        }
$mysqli; $error; должны иметь тип доступа private,
PHP:
            public function getError() {
               return $this->error ;
            }
getError()- это свойство класса User - оно хранит ошибку, а не присваивает полю $error значение.Сделаны get методы для того что бы нельзя бы в не класса менять значение поля $error, так как в твоем варианте я могу сделать так
PHP:
$user=new User();
$user->getError("Ошибка");
 
error исправил, но mysqli не могу понять как потом сделать подключение в индекс файле если там стоит private
 
Ок.
PHP:
$user=new User();
unset($user->mysqli);
И тебе приейдеться работать на новогодние праздники и выходные.Подключение к бд обычно делают по этому шаблону Wiki
 
Ок.
PHP:
$user=new User();
unset($user->mysqli);
И тебе приейдеться работать на новогодние праздники и выходные.
А по каким дням придется работать в таком случае? Как объявлять, чтобы от этого защититься?
PHP:
$user=new User();
unset($user);
 
Честно скажу не знаю, первое что приходит в голову это перехватить деструктор, но там проблема нельзя выбросить Exeption.У тебя есть решение?
 
Ребят, прекращайте оффтопить, автору и того, что ему написали не осилить сразу.)
 
malina95
вобщем продолжай модифицировать свой класс и будешь улавливать смысл ООП, главный из которых - УДОБСТВО.

Mr.Nobody
это нарушение принципов ООП. Эти поля $login;
$password; тут совершенно не нужны,поле $error; должно быть скрыто, и доступ можно получить полю $error через get метод к примеру
Публичные поля ничего не нарушают, инкапсуляция это "скрытие реализации", а не про модификаторы доступа как многие заблуждаются.
а вот делать для них сеттор имеет смысл чтобы избавиться от дублирования
PHP:
$login = trim(htmlspecialchars($login));
 $password = trim(htmlspecialchars($password));

// будет
function foo($login, $password) {
    $this->setLogin($login); 
    $this->setPassword($password);
    echo $this->login, ' ', $this->password;
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху