ФорумПрограммированиеPHP для идиотовPHP и ООП → Как начать понимать в ООП или что почитать для самых непонимающих

Как начать понимать в ООП или что почитать для самых непонимающих

  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz Ноя. 17, 2009, 7:24 д.п., спустя 4 часа 53 минуты 21 секунду


    чета ваще не по теме флудня пошла …

    ты сам только что не в тему написал
    Спустя 11 сек.


    чета ваще не по теме флудня пошла …

    ты сам только что не в тему написал

    и я тоже
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Ноя. 17, 2009, 9:24 д.п., спустя 1 час 59 минут 51 секунду


    а как вот к примеру эту функцию можно былобы на ООП написать…


    Никак. Можно оформить функцию в виде единственного метода класса, потом породить объект этого класса и вызвать метод — это ООП идиотов.
    Нормальный объектный подход начинается с размышлений "какие сущности есть и каков набор операций над ними".

    Как вариант: мы решаем, что стоит изолировать всю работу с пользовательскими аккаунтами в виде класса. И один из методов будет "получить ссылку на пользовательскую аватару".
    Вариант 2: идем с другого конца. Аватара — это один из частных случаев графических файлов. Создаем класс Картинка с методами получения превьюшек разных размеров, например. И один из вариантов создания объекта Картинка будет получить аву по id пользователя.
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Ноя. 17, 2009, 10:10 д.п., спустя 45 минут 41 секунду

    artoodetoo, да вот нихуя :)

    function avatar($id)
    {
    if (is_file("user/avatars/".$id.".gif"))
    $size=getimagesize("user/avatars/".$id.".gif");
    if($size[0]>200 && $size[1]>200) { $hw="WIDTH=200 HEIGHT=200"; } else { $hw=""; }

    if (is_file("user/avatars/".$id.".jpg"))
    $size=getimagesize("user/avatars/".$id.".jpg");
    if($size[0]>200 && $size[1]>200) { $hw="WIDTH=200 HEIGHT=200"; } else { $hw=""; }

    if (is_file("user/avatars/".$id.".png"))
    $size=getimagesize("user/avatars/".$id.".png");
    if($size[0]>200 && $size[1]>200) { $hw="WIDTH=200 HEIGHT=200"; } else { $hw=""; }


    if (is_file("user/avatars/".$id.".gif"))
    echo "<img src='user/avatars/".$id.".gif' ".$hw." alt='' />\n";
    elseif (is_file("user/avatars/".$id.".jpg"))
    echo "<img src='user/avatars/".$id.".jpg' ".$hw." alt='' />\n";
    elseif (is_file("user/avatars/".$id.".png"))
    echo "<img src='user/avatars/".$id.".png' ".$hw." alt='' />\n";
    else {
    echo "<img src='user/avatars/noava.gif' WIDTH=200 HEIGHT=200 alt='аватар' />\n";
    }

    }


    <?
    class Avatar {
    private $id;

    public __construct($id)
    {
    $this->id = $id;
    }

    function imgTag($path, $maxW, $maxH = false, $alt="")
    {
    $path = sprintf($path, $this->id);
    $maxH = $maxH ? $maxH : $maxW;

    if (is_file($path))
    {
    $size=getimagesize("user/avatars/".$id.".gif");
    if($size[0]>$maxW && $size[1]>$maxH) {
    $hw="WIDTH=\"$maxW\" HEIGHT=\"$maxH\"";
    }
    else
    {
    $hw="";
    }

    return "<img src=\"$path\" $hw alt='".htmlspecialchars($alt)."' />\n";
    }

    return "";
    }
    }

    class UserAvatar extends Avatar {
    function avatar($id)
    {
    if($img = $this->imgTag("user/avatars/%s.gif",200))
    {
    echo $img;
    }
    elseif($img = $this->imgTag("user/avatars/%s.jpg",200))
    {
    echo $img;
    }
    elseif($img = $this->imgTag("user/avatars/%s.png",200))
    {
    echo $img;
    }
    else {
    echo "<img src='user/avatars/noava.gif' WIDTH=200 HEIGHT=200 alt='аватар' />\n";
    }
    }


    плюсы такого подхода, что конечными реализациями можно "поднастраивать функционал, а не переписывать снова основы". то есть например я могу сделать useravatar, groupavatar конечные реализации с нужными методами. хороший пример?)
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Ноя. 17, 2009, 6:12 п.п., спустя 8 часов 2 минуты


    заеабало что питон называют пайтоном … или я урод или мир уроды … кто рассудит … :)

    заебало "на Украину" и "в хуй"
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Ноя. 17, 2009, 6:18 п.п., спустя 6 минут 7 секунд

    class UserAvatar extends Avatar {
    private avatars = array('gif','jpg','png')
           function avatar($id)
           {
    $i=0;
                   while(!is_file($file = $this->imgTag("user/avatars/%s.".$this->avatars[$i++],200));
                         if ($file)
                           echo  $file ;
                         else
                           echo "<img src='user/avatars/noava.gif' WIDTH=200 HEIGHT=200 alt='аватар' />\n";
                   }
    }
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Ноя. 17, 2009, 6:22 п.п., спустя 3 минуты 53 секунды

    CTAPbIu_MABP, а в бесконечность не уйдет если аватарки совсем нету?)
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Ноя. 17, 2009, 6:27 п.п., спустя 4 минуты 55 секунд

    да надо добавить

    $this->avatars[$i++] && !is_file($file = $this->imgTag("user/avatars/%s.".$this->avatars[$i],200)
    Спустя 92 сек.
                   

    for($i=0;$this->avatars[$i] && !is_file($file = $this->imgTag("user/avatars/%s.".$this->avatars[$i],200);i++);
    if ($file)
    echo $file ;
    else
    echo "<img src='user/avatars/noava.gif' WIDTH=200 HEIGHT=200 alt='аватар' />\n";
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Ноя. 17, 2009, 6:35 п.п., спустя 7 минут 44 секунды

    CTAPbIu_MABP, хуйня получается))

    is_file лишний :)

    for($i=0;$this->avatars[$i] && ($file = $this->imgTag("user/avatars/%s.".$this->avatars[$i],200));i++);
    if ($file)
    echo $file ;
    else
    echo "<img src='user/avatars/noava.gif' WIDTH=200 HEIGHT=200 alt='аватар' />\n";
    Сапожник без сапог
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz Ноя. 17, 2009, 6:35 п.п., спустя 56 секунд

    phpdude, да похер :)

    PS 4200
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz Ноя. 18, 2009, 6:55 д.п., спустя 12 часов 19 минут 16 секунд

    phpdude, пример говно :) Зачем плодить такие микро-классы? Понятно, что в реальной системе кроме аватары есть еще кое что, поэтому…

    imho:
    Метод imgTag() просится в более общий класс Картинка или МенеджерКартинок. Если аватары пользователя и группы разные - добавим метод avatar() в классы Пользователь и Группа (логично порождать их от общего абстрактного родителя - не только ради аватара). Обходимся без ТРЕХ ЛИШНИХ УЕБАНСКИХ КЛАССОВ.
    ιιlllιlllι унц-унц
  • krasun

    Сообщения: 1370 Репутация: N Группа: Джедаи

    Spritz Ноя. 18, 2009, 8:51 д.п., спустя 1 час 56 минут 24 секунды


    phpdude, пример говно :) Зачем плодить такие микро-классы? Понятно, что в реальной системе кроме аватары есть еще кое что, поэтому…

    imho:
    Метод imgTag() просится в более общий класс Картинка или МенеджерКартинок. Если аватары пользователя и группы разные - добавим метод avatar() в классы Пользователь и Группа (логично порождать их от общего абстрактного родителя - не только ради аватара). Обходимся без ТРЕХ ЛИШНИХ УЕБАНСКИХ КЛАССОВ.



    наверное, в прикладных задачах и не нужно плодить много классов.
  • kamachi

    Сообщения: 320 Репутация: N Группа: Кто попало

    Spritz Ноя. 18, 2009, 3:14 п.п., спустя 6 часов 22 минуты 39 секунд



    а как вот к примеру эту функцию можно былобы на ООП написать…

    function avatar($id)
    {
    if (is_file("user/avatars/".$id.".gif"))
    $size=getimagesize("user/avatars/".$id.".gif");
    if($size[0]>200 && $size[1]>200) { $hw="WIDTH=200 HEIGHT=200"; } else { $hw=""; }

    if (is_file("user/avatars/".$id.".jpg"))
    $size=getimagesize("user/avatars/".$id.".jpg");
    if($size[0]>200 && $size[1]>200) { $hw="WIDTH=200 HEIGHT=200"; } else { $hw=""; }

    if (is_file("user/avatars/".$id.".png"))
    $size=getimagesize("user/avatars/".$id.".png");
    if($size[0]>200 && $size[1]>200) { $hw="WIDTH=200 HEIGHT=200"; } else { $hw=""; }


    if (is_file("user/avatars/".$id.".gif"))
    echo "<img src='user/avatars/".$id.".gif' ".$hw." alt='' />\n";
    elseif (is_file("user/avatars/".$id.".jpg"))
    echo "<img src='user/avatars/".$id.".jpg' ".$hw." alt='' />\n";
    elseif (is_file("user/avatars/".$id.".png"))
    echo "<img src='user/avatars/".$id.".png' ".$hw." alt='' />\n";
    else {
    echo "<img src='user/avatars/noava.gif' WIDTH=200 HEIGHT=200 alt='аватар' />\n";
    }

    }



    А как ты написал эту функцию и с какой целью?

    по идее она должна была выводить аватар пользователя,но теперь я решил изменять размер. А на первый вопрос я даже не знаю что ответить))
  • kamachi

    Сообщения: 320 Репутация: N Группа: Кто попало

    Spritz Дек. 4, 2009, 6:18 п.п., спустя 16 дней 3 часа 3 минуты

    я тут пытался понять ООП и одновременно научиться работать со Smarty ))
    Только чур не смейтесь и не закидывайте пирожками)


    листинг add_file.php



    <?
    //скрипт добавление файла

    #подгружаем доп файлы#
    include_once 'sys.php';
    ######################

    $smarty->assign("title","Загрузка файлов");
    $smarty->assign("test",$_POST['name']);

    $filename = $_FILES['uf']['name'];
    $time=time();

    class FileUplaod
    {
    var $types = array('.jpg','.gif','.png','.mp3','.zip','.rar','.jar');
    var $filename;
    var $dir="files/";
    var $time;

    //Получаем расширение сравниваем расширение файла с допустимым
    function ras($filename)
    {
    $this->filename = $filename;
    $ras = substr($this->filename, strpos($this->filename,'.'), strlen($this->filename)-1);
    if(!in_array($ras,$types)) die ('Данный тип файла не поддерживается!');
    }

    function newFile($time,$dir)
    {
    $savefile=$dir.$time."_".$ras;
    }

    function saveNewFile()
    {
    if(copy($_FILES['uf']['tmp_name'],$savefile))
    {
    echo "Файл успешно загружен в альбом!";
    } else {
    echo "Во время загрузки произошла ошибка!";
    }
    }


    }

    $obj = new FileUplaod;
    $obj->ras();
    $obj->newFile();
    $obj->saveNewFile();


    $smarty->display('add_file.tpl');



    ?>



    листинг sys.php

    <?
    require('smarty/Smarty.class.php');
    $smarty = new Smarty;

    ?>




    листинг add_file.tpl

    <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru">
    <head>
    <title>{$title}</title>
    <link rel="stylesheet" href="templates/style.css" type="text/css" />
    </head>
    <body>
    <div class="body">
    {$test}

    <form method="post" action="add_file.php">
    Название<div><input type="text" name="name" /></div>
    Описание<div><textarea name="des" cols="20"></textarea></div>
    Автор<div><input type="text" name="autor"/></div>
    Файл<div><input type="file" name="uf" id="file" style="width:150px;"/></div><br />
    <input type="submit" value="Добавить"/>
    </form>

    </div>
    </body>
    </html>




    ну собственно проблема в моем долбоклассе)) файла add_file.php …
    Я хоть на правильном пути?))))




    Warning: Missing argument 1 for FileUplaod::ras(), called in Z:\home\test1.ru\www\load\add_file.php on line 48 and defined in Z:\home\test1.ru\www\load\add_file.php on line 22

    Warning: in_array() [function.in-array]: Wrong datatype for second argument in Z:\home\test1.ru\www\load\add_file.php on line 26
    Данный тип файла не поддерживается!


  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz Дек. 4, 2009, 6:44 п.п., спустя 25 минут 59 секунд

    kamachi, вы ООП учите по PHP4?
    Спустя 52 сек.
    $obj->ras();
    туда надо передать $filename
    Спустя 52 сек.
    in_array($ras,$types)
    надо
    in_array($ras,$this->types)
    Спустя 79 сек.
    strlen($this->filename)-1
    это нафига?
    Спустя 55 сек.
    strpos($this->filename,'.')
    В вашем случае надо искать с конца, а то названия "bla.blabla.zip" не пройдет
    Спустя 115 сек.
    if(copy($_FILES['uf']['tmp_name'],$savefile))
    надо
    if(copy($_FILES['uf']['tmp_name'],$this->savefile))
    и тут
    $savefile=$dir.$time."_".$ras;
    надо
    $this->savefile=$dir.$time."_".$ras;
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz Дек. 4, 2009, 6:44 п.п., спустя 16 секунд

    FileUplaod
    мило
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!