http://ru.wikipedia.org/wiki/Наследование_(программирование) Читаем, и думаем еще раз. Чисто как отсебятина: я бы сделал два раздельных класса, но по другим причинам. Почему - расскажу потом. Может быть. )
тогда (если предположить что "удаление зубов автогеном через анальное отверстие иногда может быть оправданным"(с)) класс работы работы со строкой урла должен наследовать общему классу работы со строками, а класс получения контента должен быть абсолютно отдельным и получать уже готовую строку. Но у меня многие классы наследуют класс для работы с мускулом, мне так удобней писать(обращаться к объектам работающим с БД) это по определению не верно?
PHP: <?php class A { private $b; public function __construct() { $this->b = new B(); } } $a = new A();
По определению - нет, не верно. Это должно делаться по другому. Но мы вернемся к этому позже. это несколько крайность ) но идея верна.
Вот, один из примеровСергей привел. Я правда, предпочитаю передавать ссылку на обьект, ибо они у меня часто рулятся ServiceLocator-ом. Хорошо, рассмотрим пока твой класс, как класс работы с урлом. И мы приходим к http://ru.wikipedia.org/wiki/Инкапсуляция_(программирование) Прочитать, высказать мысли.
Горбунов Олег ну, похоже что инкапсуляция у меня в коде сделана ради самой инкапсуляции... и ещё мне кажеться что PHP: IF($last_h!=''){ $ger=$this->hostAndPage($host, $first_h, $last_h);//если он есть то это не "индексевая страница" } ELSE{ $ger=$this->host($host, $first_h);//если нету то "индексавая" } очень не правильно. надо было разместить код этих методы в "блоках then" данного метода и "не пложить сущночтей сверх необходимого"?
а где у тебя инкапсуляция? Предлагаю в свете прочитанного породить «правильный» класс для работыс урлом ?
а разве функция в классе не расматриваеться как инкапсуляция этой самой функции в класс? если нет, то как она выглядит на практике?...
PHP: class ChUrl{ private $url; function __construct($url){//определяем что нам надо с ним сделать $this->url=$url; $http=strpos($this->url, "http://");// ищем есть ли ненужные элементы адреса $www=strpos($$this->url, "www."); IF ($http===false){//отмеряем длину строки которую нужно(если нужно) отрезать //echo 1; $h=0; } ELSE{ $h=7; } IF ($www===false){ $w=0; } ELSE{ $w=4; } $first_h=(0+$h)+$w; IF($first_h!=0){ $this->cutUrl($first_h); } $last_h=strpos($this->url, "/"); //проверяем есть ли слешь IF($last_h!=''){ $adress[0]=substr($this->url, 0, $last_h); $adress[1]=substr($this->url, $last_h) } ELSE{ $adress[0]=substr($host, 0); $adress[1]="/"; } return $adress; } function cutUrl($first_h){ $this->url=substr($this->url, $first_h); } } или я опять где-то не прав?
Вынеси весь код из конструктора в отдельный метод parse. В конструкторе оставь инициализацию переменной $url. Добавь методы get/setUrl.
PHP: class ChUrl{ private $url; function __construct($url){//определяем что нам надо с ним сделать $this->url=$url; } function parse(){ $http=strpos($this->url, "http://");// ищем есть ли ненужные элементы адреса $www=strpos($$this->url, "www."); IF ($http===false){//отмеряем длину строки которую нужно(если нужно) отрезать //echo 1; $h=0; } ELSE{ $h=7; } IF ($www===false){ $w=0; } ELSE{ $w=4; } $first_h=(0+$h)+$w; IF($first_h!=0){ $this->cutUrl($first_h); } $last_h=strpos($this->url, "/"); //проверяем есть ли слешь IF($last_h!=''){ $adress[0]=substr($this->url, 0, $last_h); $adress[1]=substr($this->url, $last_h) } ELSE{ $adress[0]=substr($host, 0); $adress[1]="/"; } $this->url=$adress; } function setUrl($url){ $this->url=$url; } function getUrl{ return $this->url; } function cutUrl($first_h){ $this->url=substr($this->url, $first_h); } } а делать ретурн и фукции parse() не комильфо? и выше Олег говорил что ретурн надо делать везде, в таком случае функция getUrl($get) теряет смысл?... да и имеет ли смысл делать функцию cutUrl() private? и что она должна возвращать?...
Соотвественно cutUrl не должна затрагивать установленный адрес. Она должна возвращать полученный адрес. PHP: function cutUrl($first_h){ return substr($this->url, $first_h); }
PHP: <?php class ChUrl{ private $url; private $geting_url function __construct($url){//eустанавливаем занчения $this->geting_url=$url; $this->url=$this->geting_url; IF($this->url==$this->geting_url AND $this->geting_url==$url) return "ok"; } function parse(){//парсим $http=strpos($this->url, "http://");// ищем есть ли ненужные элементы адреса $www=strpos($$this->url, "www."); IF ($http===false){//отмеряем длину строки которую нужно(если нужно) отрезать $h=0; } ELSE{ $h=7; } IF ($www===false){ $w=0; } ELSE{ $w=4; } $first_h=(0+$h)+$w; IF($first_h!=0){ $this->url=$this->cutUrl($first_h); } $last_h=strpos($this->url, "/"); //проверяем есть ли слешь IF($last_h!=''){ $adress[0]=substr($this->url, 0, $last_h); $adress[1]=substr($this->url, $last_h) } ELSE{ $adress[0]=substr($host, 0); $adress[1]="/"; } $this->url=$adress; return $this->url; } function setUrl($url){ $this->geting_url=$url; $this->url=$this->geting_url; IF($this->url==$this->geting_url AND $this->geting_url==$url) return "ok"; } function getUrl{ return $this->geting_url; } private function cutUrl($first_h){//функция обрезания return substr($this->url, $first_h); } } я правильно уловил суть?
да, и насчёт использование класса работы с БД в другиз классах? агрегированием или для этого случая есть какое-то иное решение?