лек въпрос за oop

shaz

Registered
Има ли някакъв вариант функциите q() и bold() да се обединят в една като се запази същата функционалност?

Код:
class test {
        
        function q () {
                $this->number = "123";
        }
        
        function bold () {
                echo "<b>" . $this->str . "</b>";
        }
        
        function body() {
                echo $this->number;
                $this->str = "abv";
                $this->bold();
        }

}

$v = new test;
$v->q();
$v->body();
 
Целта е да направя 2 метода (общо + body = 3)

първия метод в случея q() да изкарва number-ите "123" и текста abv да го прави bold

а втория метод да искарва number-ите 456 и текста abv да го прави даречем underline
 
Има един начин,който не е за препоръчване, но може да гфо ползва:
Код:
class test {
       
public $number;
public $str;        
function q () {
               echo  $this->number;
                echo "<b>" . $this->str . "</b>";
        }
}

$v = new test();
$v->number = "123";
$V->str = "abv";
$v->q();
Това е чрез достъп до променливите $number, $str.
Не е за предпочитане, тъй като една от целта на ООП-то е капсулирането.
Друг начин:
Код:
class test {
       
        function q ($number, $str) {
                echo $number;
                echo "<b>" . $str . "</b>";
        }
}

$v = new test();
$v->q("123", "abv");
 
Код:
<?php
class test {
    var $number;
    var $str;

    function qbold($str) {
        $this->number = "123";
        $this->str = "<b>" . $str . "</b>";
    }

    function body() {
        $this->qbold("abv");
        echo $this->number;
        echo $this->str;
    }
}

$v = new test;
$v->body();
?>

Това ми идва на ума сега...
 
идеята ми е инсталацията да се запази в такъв вид

$v = new test;
$v->q();
$v->body();

като само да се сменя метода дали да бъде $v->q(); или другия
 
Първо класа е много убъркан и абсолютно грешно написан!Каква и да е целта ти да го ползваш, трябва да го усмислиш още веднъж.
 
Код:
<?php
class test {
    var $number;
    var $str;

    function bold() {
        $this->number = "123";
        $this->str = "<b>abv</b>";
    }

    function italic() {
        $this->number = "123";
        $this->str = "<i>abv</i>";
    }

    function body() {
        echo $this->number;
        echo $this->str;
    }
}

$v = new test;
$v->bold();
$v->body();

$v->italic();
$v->body();
?>

:?
 
Значи работата е такава че искарвам новини от базата данни като има случай в който се изкарват всички новини и случай в който се изкарва само една

Искам да си направя клас който да има метод който да изкарва всичките и метод който да изкарва една новина

Аз си го представям както в първия пост това $this->number = "123"; да ми бъде заявката към mysql-a
а това - echo "<b>" . $this->str . "</b>" да бъде начина по който се форматира информацията

и като имам 2 такива метода - единия e за 1 новина другия за всички и само да сменям който ми тряба на съответната страница

Незнам дали го обясних достатачно ясно но това е в обши линии
 
emagi каза:
Каква и да е целта ти да го ползваш, трябва да го усмислиш още веднъж.
Това ,което ти писах не бе безцелно!
Това се прави по следният начин:
Код:
class emagi {
public function query($query)
{
     mysql_query($query) or die(mysql_error());
     return $query;
}
}
$emagi = new emagi();
$emagi->query("SELECT * FROM table ORDER BY id LIMIT 1"); //тази ще ти изведе последна новина
$emagi->query("SELECT * FROM table ORDER BY id DESC"); //тази ще ти изведе всички новини
Това е идеята! :)
 
emagi каза:
emagi каза:
Каква и да е целта ти да го ползваш, трябва да го усмислиш още веднъж.
Това ,което ти писах не бе безцелно!
Това се прави по следният начин:
Код:
class emagi {
public function query($query)
{
     mysql_query($query) or die(mysql_error());
     return $query;
}
}
$emagi = new emagi();
$emagi->query("SELECT * FROM table ORDER BY id LIMIT 1"); //тази ще ти изведе последна новина
$emagi->query("SELECT * FROM table ORDER BY id DESC"); //тази ще ти изведе всички новини
Това е идеята! :)

Това ясно но трябва да има и два начина за показване на резултатите защото като се извежда само една новина се показва само даречем
echo "row[subj]<br />$row[date]<br />$row[subj]"
а като се извеждат всичките трябва да излиза само
echo "row[subj]<br />"

и болката ми е mysql заявката и начина на изкарване на резултатите да се управляват със смяната само на 1 метод
 
StormBreaker каза:
Кажи за какво точно ти трябва да ти го напиша, че нещо логиката ти куца яко.

ето какво е точно

в момента е така

Код:
if(isSet($_GET["id"]) AND is_numeric($_GET["id"])) {

    $news_id_ = $_GET["id"];
    
    $news_result = mysql_query("SELECT * FROM `news` WHERE `nws_id` = '$news_id_'");
    
    $news_row = mysql_fetch_array($news_result);
    
    
    $newsId = $news_row["nws_id"];
    $newsSubj = stripslashes($news_row["nws_subj"]);
    $newsUvod = stripslashes($news_row["nws_uvod"]);
    $newsText = stripslashes($news_row["nws_text"]);
    $newsDate = $news_row["date"];
    
    print('<b>'.$newsSubj.'</b><br /><br />'.$newsText.'<br /><br />'.$newsDate.'');
    

} else {

    $news_result = mysql_query("SELECT * FROM `news` WHERE ORDER BY `nws_id` DESC");
    
    while($news_row = mysql_fetch_array($news_result)) {
        
        $newsId = $news_row["nws_id"];
        $newsSubj = stripslashes($news_row["nws_subj"]);
        $newsUvod = stripslashes($news_row["nws_uvod"]);
        $newsText = stripslashes($news_row["nws_text"]);
        $newsDate = $news_row["date"];
        
        print ('• <a href="?page=news&id='.$newsId.'"><b>'.$newsSubj.'</b></a> # '.$newsDate.'<br />'.$newsUvod.'<br /><br />');

    }

}

Целта е
да стане нещо такова


Код:
$obj = new news();

if(isSet($_GET["id"]) AND is_numeric($_GET["id"])) {

$obj->one($_GET["id"]);

} else {

$obj->all();

}
 
Извинявай за флейма ама - какво общо има това което искаш с това което попита в първия си пост? Задачата не е особено сложна и в общи линии просто си изнасяш заявките и тяхната обработка в две функции в класа съответно one и all и си готов. В конструктура правиш връзката към базата данни ако нямаш такава. Естествено това си е доста елементарно решение, но ако е за малка система си е напълно подходящо.
 
Че за това защо ти е ООР?

if(isSet($_GET["id"]) AND is_numeric($_GET["id"]))
$news_result = mysql_query("SELECT * FROM `news` WHERE `nws_id` = '".$_GET["id"]."'");
else
$news_result = mysql_query("SELECT * FROM `news` WHERE ORDER BY `nws_id` DESC");

$num = mysql_num_rows($news_result);

while($news_row = mysql_fetch_array($news_result))
{
$newsId = $news_row["nws_id"];
$newsSubj = stripslashes($news_row["nws_subj"]);
$newsUvod = stripslashes($news_row["nws_uvod"]);
$newsText = stripslashes($news_row["nws_text"]);
$newsDate = $news_row["date"];

if ($num > 1)
print ('• <a href="?page=news&id='.$newsId.'"><b>'.$newsSubj.'</b></a> # '.$newsDate.'<br />'.$newsUvod.'<br /><br />');
else
print('<b>'.$newsSubj.'</b><br /><br />'.$newsText.'<br /><br />'.$newsDate.'');
}
 
jamby77 каза:
Извинявай за флейма ама - какво общо има това което искаш с това което попита в първия си пост? Задачата не е особено сложна и в общи линии просто си изнасяш заявките и тяхната обработка в две функции в класа съответно one и all и си готов. В конструктура правиш връзката към базата данни ако нямаш такава. Естествено това си е доста елементарно решение, но ако е за малка система си е напълно подходящо.

В първия пост съм написал най-опростено и съм махнал всичко излишно
само същината на въпроса
Както и да е...

А какво би било едно по pro решение
 
Не че без ооп не става но исках да го разцъкам малко и да му намеря приложение и за това се хванах с тая част
 
shaz каза:
Не че без ооп не става но исках да го разцъкам малко и да му намеря приложение и за това се хванах с тая част

Сега ми се налага да си направя един XML парсер и ще ти го покажа, за да видиш защо е полезно OOP. А за твоя случай изобщо няма смисъл от OOP.
 
StormBreaker каза:
shaz каза:
Не че без ооп не става но исках да го разцъкам малко и да му намеря приложение и за това се хванах с тая част

Сега ми се налага да си направя един XML парсер и ще ти го покажа, за да видиш защо е полезно OOP. А за твоя случай изобщо няма смисъл от OOP.

ООП в момента в България, най-често се използва за съкращаване на кода. А и защо да не се си го напише "обектно" човека. Изкарва всичките глупости в един файл и после с 3 реда си изкарва резултата, който би го изкарал с 53. Бързина, чистота на кода, подреденост. Няма лошо в това да използва ООП. Аз например изпозвам ООП за много неща. В един от сайтовете ми, за спортни новини (да не правим реклама в този форум) съм използвал ООП за показването на новините, за вход/регистрация, за коментарите, абе за почти всичко. Не е лошо. А пък и невярвам човека да прави супер огромен проект, мисля че изучава още Обектното Ориентирано Програмиране.
:?:
 

Back
Горе