PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (183): В начало « ... 175 176 177 178 179 [180] 181 182 183 »

> Найдено сообщений: 2732
Bio man Отправлено: 29 Сентября, 2011 - 07:27:04 • Тема: Нубские вопросы • Форум: Вопросы новичков

Ответов: 9
Просмотров: 395
а что это за licalhost? На локалке обычно localhost. Как у вас сервер установлен? Сами отдельно ставили или сразу пакетом, типо денвера? $db надо прописать самому если отсутствует. И убедитесь что юзернэйм и пасворд в БД совпадают с выше приведенными.
Bio man Отправлено: 27 Сентября, 2011 - 20:00:49 • Тема: клонировать объект или создать новый • Форум: Объектно-ориентированное программирование

Ответов: 3
Просмотров: 1333
так и думал, просто не мог грамотно сформулировать мысль Улыбка ясно понятно, всем спасибо Улыбка
(Добавление)

не хочу создавать еще одну тему потому спрошу тут. посоветуйте хорошую книгу по ООП в пхп5
Bio man Отправлено: 27 Сентября, 2011 - 19:51:38 • Тема: клонировать объект или создать новый • Форум: Объектно-ориентированное программирование

Ответов: 3
Просмотров: 1333
ввелся в заблуждение между двумя этими понятиями... какая разница? ведь в обоих случиях создаются независимые друг от друга объекты! создать даже проще. возможно отвечу сам на свой вопрос но не знаю прав ли я... и так ответ: копия обьекта уже содержит в себе ранее установленную конфигурацию из родительского объекта а создание нового объекта не несет в себе такой информации. так ли это?
Bio man Отправлено: 27 Сентября, 2011 - 16:18:32 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
если наследуются абстрактные методы то они обезательно должны быть определены в классе потомке? если не определить абстрактные методы в наследнике то кидает ошибку. это нормально? Fatal error: Class doggy contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (dog::nm)
(Добавление)
сам разобрался, стоило внимательней прочитать мануал Улыбка
Цитата:
При наследовании от абстрактного класса, все методы, помеченные абстрактными в родительском классе должны быть определены в классе-потомке
Bio man Отправлено: 27 Сентября, 2011 - 11:54:07 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
LIME пишет:
Bio man пишет:
ну а если какойто метод интерфейса вообще не нужен?
тогда скорее всего и интерфейс не нужен ))
но если что можно просто реализовать метод интерфейса пустотой строкой в теле функции.
формально вы реализовали, а в методе пустота
вот это я и имел ввиду. Метод интерфейса реализуем пустой строкой в абстрактном классе а в классе наследующем абстрактный класс можем уже и забыть о не нужных, т.е. пустых методах и даже не обьявлять их
(Добавление) наконец дошло, извеняюсь за мою тупость
Bio man Отправлено: 27 Сентября, 2011 - 10:40:00 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
Stierus пишет:
Имелось ввиду, что нужно объявить его абстрактным и в дочернем классе дописать все недостающее. Если класс имплементит интерфейс - никакими уловками ты не заставишь его работать, не реализовав в этом классе все, что требует интерфейс.
ну а если какойто метод интерфейса вообще не нужен? Я понемаю, что абстрактный класс может реализовывать не все методы интерфейса и в дочерном классе уже не абстрактном методы не реализованые в абстрактном классе могут быть даже не обьявлены?
Bio man Отправлено: 27 Сентября, 2011 - 07:42:38 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
нащет абстрактных классов и интерфейсов - почему ввыдаст ошибку? Я сам не пробовал так делать, но в книжке русским языком было написано что если класс не реализует какие то методы интерфейса то его следует определить абстрактным. Может имелось ввиду что метод должен быть определен в абстрактном классе но может быть не реализован?
Bio man Отправлено: 26 Сентября, 2011 - 20:30:05 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
различия между интерфейсом и абстрактным классом: абстрактный класс может иметь свойства и конструктор, что интерфейс иметь не может. и еще - если класс не реализует все методы интерфейса то класс следует определить абстрактным. абстрактный класс может и не иметь абстрактных методов. абстрактный класс может иметь реализацию методов а может и не иметь. нельзя создать экземпляр абстрактного класса, только наследовать его. вот что я выучил и понял сегодня Радость еще понел полиморфизм но это уже не по теме Улыбка
Bio man Отправлено: 26 Сентября, 2011 - 16:07:14 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
ясно понятно! всем спасибо за помощь, пока что вопросов нет...
Bio man Отправлено: 25 Сентября, 2011 - 21:25:10 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
Champion пишет:
Надо включить показ ошибок, тогда будет видно, почему. display_errors on и error_reporting E_ALL
(Добавление)
А еще http://phpfaq.ru/debug
без изменений. такое поведение подталкивает на мысль что интерфейс это не просто шаблон (скелет) а еще каким то образом управляет классом... ведь логично, что дочтаточно реализации поведения класса и не важно наследует класс интерфейс или нет.... если что то интерфейс Iterator это интерфейс из SPL. не чего не понимаю!
Bio man Отправлено: 25 Сентября, 2011 - 20:52:53 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
ага. вот еще вопрос. в данном скрипте если стереть "implements Iterator" то ничего работать не будет, тоесть выведет пустую страницу, иначе все хорошо работает. почему так происходит?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. ////////////////////////////////////////////////////////////////////
  3. class MySQLResultSet implements Iterator{
  4.   //data members
  5.   private $strSQL;
  6.   private $databasename;
  7.   private $connection;
  8.   private $result;
  9.   private $valid;
  10.   private $currentrow;
  11.   private $key;
  12.   //programmer defined error numbers
  13.   //in range not used by MySQL
  14.   const INDETERMINATE_TOTAL_NUMBER = 5001;
  15.   const UNNECESSARY_SQL_CALC_FOUND_ROWS = 5002;
  16.   const NOT_SELECT_QUERY = 5003;
  17. ////////////////////////////////////////////////////////////////////
  18. //constructor
  19. ////////////////////////////////////////////////////////////////////
  20.   public function __construct( $strSQL, $databasename, $connection ){
  21.     $this->strSQL = $strSQL;
  22.     $this->connection = $connection;
  23.     $this->databasename = $databasename;
  24.     if(!mysql_selectdb($databasename, $connection)){
  25.       throw new MySQLException(mysql_error(), mysql_errno());
  26.     }
  27.     if(!$this->result = mysql_query($strSQL, $connection)){
  28.       throw new MySQLException(mysql_error(), mysql_errno());
  29.     }
  30.     //check if contains SQL_CALC_FOUND_ROWS
  31.     if (stristr($strSQL,"SQL_CALC_FOUND_ROWS")){
  32.       $msg = "No need to use SQL_CALC_FOUND_ROWS.";
  33.       throw new MySQLException($msg, self::UNNECESSARY_SQL_CALC_FOUND_ROWS);
  34.     }
  35.     //initialize values (not necessary for foreach)
  36.     $this->rewind();
  37.   }
  38. ////////////////////////////////////////////////////////////////////
  39. //destructor
  40. ////////////////////////////////////////////////////////////////////
  41.   public function __destruct(){
  42.     $this->close();
  43.   }
  44. ////////////////////////////////////////////////////////////////////
  45. // public methods
  46. ////////////////////////////////////////////////////////////////////  
  47.   public function getDatabaseName(){
  48.     return $this->databasename;
  49.   }
  50. ////////////////////////////////////////////////////////////////////
  51.   public function getNumberColumns(){
  52.     return mysql_num_fields($this->result);
  53.   }
  54. ////////////////////////////////////////////////////////////////////
  55. //For select queries only
  56. ////////////////////////////////////////////////////////////////////
  57.   public function getNumberRows(){
  58.     return mysql_num_rows($this->result);
  59.   }
  60. ////////////////////////////////////////////////////////////////////
  61.   public function getInsertId(){
  62.     return mysql_insert_id( $this->connection);
  63.   }
  64. ////////////////////////////////////////////////////////////////////
  65. //Calculate total number of records if a limit clause present
  66. //Useful for calculating number of pages in versions < 4
  67. //Unreliable results if DISTINCT used
  68. ////////////////////////////////////////////////////////////////////
  69.   public function getUnlimitedNumberRows(){
  70.     $number = 0;
  71.     $versionnumber = $this->findVersionNumber();
  72.     //only need leftmost number
  73.     $version = substr($versionnumber,0,1);
  74.     //CHECK SELECT
  75.     if (!$this->checkForSelect()){
  76.       $msg = "Illegal method call - not a SELECT query";
  77.       throw new MySQLException($msg, self::NOT_SELECT_QUERY);
  78.     }
  79.     //check for limit clause
  80.     $tempsql = strtoupper($this->strSQL);
  81.     $end = strpos($tempsql,"LIMIT");
  82.     if ($end === false){ //no limit clause
  83.       $number = mysql_num_rows($this->result);
  84.     }
  85.     elseif($version < 4){
  86.       $number = $this->countVersionThree($end);
  87.     }else{ //version 4 or higher use SQL_CALC_FOUND_ROWS function
  88.       $number = $this->countVersionFour();
  89.     }
  90.     return $number;
  91.   }
  92. ////////////////////////////////////////////////////////////////////
  93.   public function getFieldNames(){
  94.     $fieldnames = array();
  95.     if(isset($this->result)){
  96.       $num = mysql_numfields($this->result);
  97.       for($i = 0; $i < $num; $i++){
  98.         if (!$meta = mysql_fetch_field($this->result, $i)){
  99.           throw new MySQLException(mysql_error(), mysql_errno());
  100.         }else{
  101.           $fieldnames[$i]= $meta->name;
  102.         }
  103.       }
  104.     }
  105.     return $fieldnames;
  106.   }
  107. ////////////////////////////////////////////////////////////////////
  108.   public function findVersionNumber(){
  109.     //mysql_get_server_info
  110.     return mysql_get_server_info($this->connection);
  111.   }
  112. ////////////////////////////////////////////////////////////////////
  113. //Iterator methods that must be implemented
  114. ////////////////////////////////////////////////////////////////////
  115.   public function current (){
  116.     return $this->currentrow;
  117.   }
  118. ////////////////////////////////////////////////////////////////////
  119.   public function key (){
  120.     return $this->key;
  121.   }
  122. ////////////////////////////////////////////////////////////////////
  123.   public function next (){
  124.     if($this->currentrow = mysql_fetch_array($this->result)){
  125.       $this->valid = true;
  126.       $this->key++;
  127.     }else{
  128.       $this->valid = false;
  129.     }
  130.   }
  131. ////////////////////////////////////////////////////////////////////
  132.   public function rewind (){
  133.     if($num = mysql_num_rows($this->result) > 0){
  134.       if(mysql_data_seek($this->result, 0)){
  135.         $this->valid = true;
  136.         $this->key = 0;
  137.         $this->currentrow = mysql_fetch_array($this->result);
  138.       }
  139.     }else{
  140.       $this->valid = false;
  141.     }
  142.   }
  143. ////////////////////////////////////////////////////////////////////
  144.         public function valid (){
  145.     return $this->valid;
  146.   }
  147. ////////////////////////////////////////////////////////////////////
  148. //private methods
  149. ////////////////////////////////////////////////////////////////////  
  150.   private function checkForSelect(){
  151.     $bln = true;
  152.     $strtemp = trim(strtoupper($this->strSQL));
  153.     if(substr($strtemp,0,6)!= "SELECT"){
  154.       $bln = false;
  155.     }
  156.     return $bln;  
  157.   }
  158. ////////////////////////////////////////////////////////////////////
  159.   private function close(){
  160.     if(isset($this->result)){
  161.       mysql_free_result($this->result);
  162.       unset($this->result);
  163.     }
  164.   }
  165. ////////////////////////////////////////////////////////////////////  
  166.   private function countVersionFour(){
  167.     $tempsql = trim($this->strSQL);
  168.     //insert SQL_CALC_FOUND_ROWS
  169.     $insertstr = " SQL_CALC_FOUND_ROWS ";
  170.     //already know it starts with "SELECT"
  171.     $tempsql = substr_replace($tempsql, $insertstr, 6, 1);
  172.     if(!$rs = mysql_query($tempsql, $this->connection)){
  173.       throw new MySQLException(mysql_error(), mysql_errno());
  174.     }
  175.     $tempsql = "SELECT FOUND_ROWS()";
  176.     if(!$rs = mysql_query($tempsql)){
  177.       throw new MySQLException(mysql_error(), mysql_errno());
  178.     }
  179.     $row = mysql_fetch_row($rs);
  180.     $number = $row[0];
  181.     //dispose of $rs
  182.     mysql_free_result($rs);
  183.     return $number;
  184.   }
  185. ////////////////////////////////////////////////////////////////////  
  186.   private function countVersionThree($end){
  187.     $tempsql = strtoupper($this->strSQL);
  188.     //check for DISTINCT - will throw things off
  189.     if(!strpos($tempsql,"DISTINCT")){
  190.       //create recordset
  191.       $start = strpos($tempsql,"FROM");
  192.       $numchars = $end-$start;
  193.       $countsql = "SELECT COUNT(*) ";
  194.       $countsql .= substr($this->strSQL, $start, $numchars);
  195.       if(!$rs=mysql_query($countsql, $this->connection)){
  196.         throw new MySQLException( mysql_error(), mysql_errno());
  197.       }
  198.       $row = mysql_fetch_row($rs);
  199.       $number = $row[0];
  200.       //dispose of $rs
  201.       mysql_free_result($rs);
  202.     }else{
  203.       $msg = "Using keyword DISTINCT, ".
  204.          "calculate total number manually.";
  205.       //must use self - not a property
  206.       throw new MySQLException($msg, self::INDETERMINATE_TOTAL_NUMBER);
  207.     }
  208.     return $number;
  209.   }
  210. }//end class
  211. ?>
  212.  
Bio man Отправлено: 25 Сентября, 2011 - 20:18:09 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
DlTA пишет:
)) чемто костыль напоминает, типа не продумали сразу так давай теперь прикинемся трехногим
не помог твой ответ.
Цитата:
я так понимаю что в классе А должны быть реализованы все методы наследованных интерфейсов?
вот что хочу уточнить
(Добавление)
всем спасибо, все понел
Bio man Отправлено: 25 Сентября, 2011 - 19:51:48 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
ну наследование я понел, это расширение базового класса. и как я понел интерфейс это своего рода шаблон для класса и актуален только тогда когда дополнением занимается сторонний разработчик. а как быть с множественным наследованием? читал, что класс не поддерживает множественное наследование и для решения этой проблемы используют интерфейсы. типо
PHP:
скопировать код в буфер обмена
  1. class A implements B, C, D, ... {}
я так понимаю что в классе А должны быть реализованы все методы наследованных интерфейсов?
Bio man Отправлено: 25 Сентября, 2011 - 19:21:07 • Тема: Помогите понять интерфейсы • Форум: Объектно-ориентированное программирование

Ответов: 34
Просмотров: 11752
Привет форумчане! Читал мануал на оф сайте про интерфейсы, читал книгу где используются интерфейсы но не как не могу понять для чего они нужны! Интерфейс это скелет а мясо наращивает класс, но зачем нужен интерфейс??? допустим я не вижу разницы в следующем:
PHP:
скопировать код в буфер обмена
  1.  
  2. interface A {
  3.    public function name($name);
  4.    public function surname($surname);
  5. }
  6.  
  7. class person implements A {
  8.   public function name($name) {
  9.      return 'My name is '.$name;
  10.   }
  11.   public function surname($surname) {
  12.      return ' and surname is '.$surname;
  13.   }
  14. }
  15.  
  16. $obj = new person();
  17. echo $obj->name('Vasja'), $obj->surname('Pupkin');
  18.  


и
PHP:
скопировать код в буфер обмена
  1.  
  2. class person {
  3.   public function name($name) {
  4.      return 'My name is '.$name;
  5.   }
  6.   public function surname($surname) {
  7.      return ' and surname is '.$surname;
  8.   }
  9. }
  10.  
  11. $obj = new person();
  12. echo $obj->name('Vasja'), $obj->surname('Pupkin');
  13.  


помогите понять интерфейсы, очень надо
Bio man Отправлено: 06 Августа, 2011 - 10:22:45 • Тема: список директорий • Форум: Работа с файловой системой и файлами

Ответов: 3
Просмотров: 3805
спасибо. что лучше будет, сделать таким способом или через таблицу БД? то есть за рание записывать путь в БД

Страниц (183): В начало « ... 175 176 177 178 179 [180] 181 182 183 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB