Въпрос за ООП

shashma88

Registered
Щом обектите могат да извикват функции така:
Код:
$connect1 = database::neshto();
Защо ми е това:
Код:
$connect = new database();
$connect->neshto();
Не разбрах много. :)
 
$connect1 = database::neshto();
Това не е обект, а се нарича функция/метод на класа. С други думи статична функция/метод. Това означава, че не е нужно да създаваш обект от тип database за да я използваш. Т.е. в случая $connect1 е резултата от изпълнението на статичната функция/метод neshto();

$connect = new database();
$connect->neshto();
Тук вече $connect е обект от тип database и neshto() е функция/метод на обекта $connect
 
И каква е разликата между статичен метод, и (динамичен?) метод извикан от функция?

-За статичния метод не ми трябват обекти - това ли е само? Тоест е идеален примерно за конекция към база данни?

И ако можете да ми кажете какво е това Object TypeCasting, много ще се радвам :)
 
Ами да речем използваш някой метод в друг клас. Вместо да правиш обект в новия клас, е по-лесно да извикаш статично метода.


Но това е доста ограничен отговор от моя страна, относно статичните методи. Когато почнеш да пишеш обектно-ориентирано, ще усетиш разликата между статичен и обикновен метод, или свойство.


Object Type-Casting е преобразуване в обект.
 
Благодаря, я погледнете какво направих:
Код:
<?php
class MySQL{
public $query;
public $fetchedInfo;
public function __invoke($hostname, $name, $password, $database)
{
$connection = mysql_connect($hostname, $name, $password);
if(!$connection){
return new Error("Connection problem: " . mysql_error());
}
mysql_select_db($database);
mysql_query("SET NAMES utf8");
    }
public function query($query){
$this->query = mysql_query($query) OR new Error("Query Error:" . mysql_error());
}
public function fetch($fetch){
$this->fetchedInfo = mysql_fetch_array($fetch) OR new Error("Query Error:" . mysql_error());
}		
}
class Error{
public function __construct($string){
die($string);
}
}
$connect = new MySQL;
$connect("localhost","root","","db");
$connect->query("SELECT * FROM notes");
$connect->fetch($connect->query);
echo $connect->fetchedInfo['something'];
?>
Първо - има ли някъде използвано нещо глупаво?
И второ - въобще това ли е програмиране с обекти?(или все едно си програмирам като преди,а си мисля че ООП пиша)
 
По-скоро е "ИЛИ". Това ти е процедурно писане на код вградено в клас с методи. Нищо от това, което си написал има смисъл, особено класа Error. Защо ти е такъв клас? Най-добре използвай изключения или връщай празни стойности.
Метода query е безМИСЛЕН. Най-добре връщай ресурса, който връща, вместо да го запазваш в свойство.
Така, както си го написал fetch метода би изглеждал по-добре така.

PHP:
public function fetch() {
         $this->fetchedInfo = mysql_fetch_assoc($this->query);
         return $this->fetchedInfo;
}

Като цяло класа ти е безсмислен. По-добре се опитай да си го структурираш по-добре, като се опиташ да използваш същността на ООП.
 
relax4o каза:
По-скоро е "ИЛИ". Това ти е процедурно писане на код вградено в клас с методи. Нищо от това, което си написал има смисъл, особено класа Error. Защо ти е такъв клас? Най-добре използвай изключения или връщай празни стойности.
Метода query е безМИСЛЕН. Най-добре връщай ресурса, който връща, вместо да го запазваш в свойство.
Така, както си го написал fetch метода би изглеждал по-добре така.

PHP:
public function fetch() {
         this->fetchedInfo = mysql_fetch_assoc($this->query);
         return $this->fetchedInfo;
}

Като цяло класа ти е безсмислен. По-добре се опитай да си го структурираш по-добре, като се опиташ да използваш същността на ООП.
Уха, ти си бил много умен. Ами я дай същински ООП клас за връзка с БД, та да ме просветлиш в най-същинските тайни на прорамирането.
 
shashma88 каза:
relax4o каза:
По-скоро е "ИЛИ". Това ти е процедурно писане на код вградено в клас с методи. Нищо от това, което си написал има смисъл, особено класа Error. Защо ти е такъв клас? Най-добре използвай изключения или връщай празни стойности.
Метода query е безМИСЛЕН. Най-добре връщай ресурса, който връща, вместо да го запазваш в свойство.
Така, както си го написал fetch метода би изглеждал по-добре така.

PHP:
public function fetch() {
         this->fetchedInfo = mysql_fetch_assoc($this->query);
         return $this->fetchedInfo;
}

Като цяло класа ти е безсмислен. По-добре се опитай да си го структурираш по-добре, като се опиташ да използваш същността на ООП.
Уха, ти си бил много умен. Ами я дай същински ООП клас за връзка с БД, та да ме просветлиш в най-същинските тайни на прорамирането.

Хем искаш да ти се отговори, хем не си доволен. Казвам ти самата истина за класа ти. Всеки занимаващ се засилено с ООП ще ти каже, че тези твои класове не струват.


PHP:
class RlxDatabase
{
    private $_link, 
            $_args,
            $_data = array();
    
    public function __construct(){
        
        $this->_link = mysql_connect(RlxConfig::conf('database.host'), 
                                     RlxConfig::conf('database.user'), 
                                     RlxConfig::conf('database.password'));
        if($this->_link){
            mysql_select_db(RlxConfig::conf('database.db'), $this->_link);
            $this->query("SET CHARACTER SET " . RlxConfig::conf('database.charset'));
        }
    }
    
    public function query($query)
    {
        return mysql_query($query, $this->_link);
    }

Това ми е началото. Надолу имам още много, макар че ще го махам.
При мен нещата общо взето седят по много по-различен начин, защото всичко ми е навързано.


ЕДИТ: Виж си въпросите

Първо - има ли някъде използвано нещо глупаво?
И второ - въобще това ли е програмиране с обекти?(или все едно си програмирам като преди,а си мисля че ООП пиша)

и ми виж отговора. Явно очакваше да ти кажа, че класа ти е просто уникален и няма друг такъв.
 

Back
Горе