Классы и функции

Aziz

Новичок
PHP:
<?php
class MyClass{

 public function welcome($param){
                $con = mysql_connect("localhost", "******", "*******");
		mysql_select_db($db_name,$con) or die("ошибка выбора базы ".mysql_error());
		mysql_query("SET NAMES 'utf8';") or die("ОШИБКА SET NAMES!!! - ".mysql_error());

 }

 public function exit($param){
          $con = mysql_connect("localhost", "******", "*******");
		mysql_select_db($db_name,$con) or die("ошибка выбора базы ".mysql_error());
		mysql_query("SET NAMES 'utf8';") or die("ОШИБКА SET NAMES!!! - ".mysql_error());

 }

}
?>

Всем привет! У меня в коде 2 и более более функций которые содержат в себе одинаковый код или переменные. Можно как нибудь сделать так чтобы этот кусок кода вызывался через определенную функцию?

Например вот так?

PHP:
 public function welcome($param){
    connect();
 }

 public function exit($param){
      connect();
 }

private function connect(){
 $con = mysql_connect("localhost", "******", "*******");
		mysql_select_db($db_name,$con) or die("ошибка выбора базы ".mysql_error());
		mysql_query("SET NAMES 'utf8';") or die("ОШИБКА SET NAMES!!! - ".mysql_error());
}
 

WMix

герр M:)ller
Партнер клуба
а сделай его аттрибутом
PHP:
<?php
class MyClass{
    private $con;
    private function connect(){
       $this->con = mysql_connect("localhost", "******", "*******");
    }
}
?>
 

Aziz

Новичок
WMix
Не работает так...
Может потому что я использую amfphp// не знаюю...(


mysql_query не делается в других функциях....
 

Aziz

Новичок
PHP:
private  $con;

 public function welcome($param){  //1 изначально вызываем эту функцию
    connect();  //2 вызываем соединение с базой
    $obj=array(); //3 создаем массив
     SQLtoOBJ("select * from users",$obj); //4 пытаемся засунуть выборку в этот массив 

 }

private function connect(){//2
 $con = mysql_connect("localhost", "******", "*******");
        mysql_select_db($db_name,$con) or die("ошибка выбора базы ".mysql_error());
        mysql_query("SET NAMES 'utf8';") or die("ОШИБКА SET NAMES!!! - ".mysql_error());
}

private function SQLtoOBJ($sql,$obj){//4
	       $result = mysql_query($sql) or die("02".mysql_error());
		while($r = mysql_fetch_assoc($result)) {
		    $obj[]= $r;
                }
}
Не получается
 

WMix

герр M:)ller
Партнер клуба
PHP:
private function SQLtoOBJ($sql){//4
  $obj = array();
  $result = mysql_query($sql) or die("02".mysql_error());
  while($r = mysql_fetch_assoc($result)) {
    $obj[]= $r;
  }
  return $obj;
 }

public function welcome($param){  //1 изначально вызываем эту функцию
  connect();
  $obj = SQLtoOBJ("select * from users"); //4 пытаемся засунуть выборку в этот массив 
 }
наверно так хотел... вдумайся почему я написал return $obj; !
 

Aziz

Новичок
WMix что то совсем не то ты написал... не вооруженным глазом видны ошибки
 

WMix

герр M:)ller
Партнер клуба
(действительно не тестировал), посмотри еще раз, я поправил вызов и функцию, но ты не туда смотришь..... и если уже, то намекай на проблему, я же не понимаю какие у тебя трудности!
 

ref

Новичок
Не ?

PHP:
<?php
class MyClass{

	function __construct ()
	{

		$this->host     = '127.0.0.1';
		$this->db       = 'default';
		$this->user     = 'user';
		$this->password = 'password';
		$this->link = mysql_connect( $this->host, $this->user, $this->password ) or die( db_down() );

		mysql_select_db( $this->db ) or die( db_down() );
		mysql_set_charset( 'UTF8' );

	}

	function db_down ()
	{

		header( 'Status: 503 Service Unavailable' );

		return mysql_error();

		exit();

	}

	function welcome ()
	{

		// тут делаем всё, что угодно:
		$r = mysql_query("SELECT * FROM `users`");

	}

}
?>
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
ref
Ты код тестировал? Если коннекта не будет, будет ошибка.
 

Фанат

oncle terrible
Команда форума
1. если что-то требуется во многих местах класса, то это желательно делать в конструкторе, чтобы не повторяться.
2. коннектиться к базе каком бы то ни было месте, кроме класса для работы с бд - жесточайший моветон.
3. die() по ошибке - жесточайший моветон.
4. если у тебя используется хоть какая-то инкапсуляция - надо всегда делать трейс, чтобы видеть, в каком месте кода приложения была вызвана та или иная функция класса.
5. функция SQLtoOBJ - дичь какая-то. Почему результат передается по ссылке, а не нормальным присваиванием?

Вот, посмотри, как сделано у меня http://phpclub.ru/talk/threads/Класс-для-безопасной-работы-с-mysql.74588/
Я не очень далеко от тебя ушёл в деле проектирования классов, так что должно быть понятно.

Экземпляр класса создаётся в самом начале работы скрипта, а потом используется в любых функциях.
чтобы сделать его доступным, пишем вверху функции
PHP:
global $db;
 
Сверху