Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Записать массив через метод
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Записать массив через метод

Страниц (1): [1]
 

1. Rio - 27 Сентября, 2016 - 17:59:28 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. class HtmlPage {
  3.         private $title;
  4.         private $keywords = array();   
  5.         private $cssref = array();
  6.        
  7.         public function __construct($title, $keywords, $cssref = null){
  8.                 //if($keywords != null){
  9.                 //      $this->keywords = array_values($keywords);
  10.                 //}
  11.                 //
  12.                 //if($cssref != null){
  13.                 //      $this->cssref = array_values($cssref);
  14.                 //}
  15.                
  16.                 if(!$this->setTitle($title)){
  17.                         $this->title=null;
  18.                 }              
  19.         }
  20.        
  21.         public function addKeywords($keywords){
  22.                 $this->keywords = array_values($keywords);
  23.         }
  24.                
  25.         public function addCssref($cssref){
  26.                 $this->cssref = array_values($cssref);
  27.         }
  28.        
  29.         public function setTitle($title){
  30.                 if(!empty($title)){
  31.                         if(is_string($title)){
  32.                         $this->title = $title;
  33.                         return true;
  34.                         }
  35.                 }
  36.                 return false;
  37.     }
  38.        
  39.         public function getKeywords(){
  40.                 return $this->keywords;
  41.         }
  42.        
  43.         public function getCssref(){
  44.                 return $this->cssref;
  45.         }
  46.        
  47.         public function getTitle(){
  48.                 return $this->title;
  49.         }      
  50.        
  51.        
  52.         public function __toString(){
  53.                 $str = 'title: '.$this->title.'</br>'                          
  54.                                 . 'array: ';
  55.                 foreach ($this->cssref as $key){
  56.                         $str .= $key.'</br>';
  57.                 }
  58.                
  59.                 return $str;
  60.         }
  61.        
  62. }
  63.  
  64. $arr_key = array('ананас','аджика','глина');
  65. $arr_css = array("style.css","main.css");
  66.  
  67. $var = new HtmlPage('тайтлтест', $arr_key, $arr_css);
  68. echo $var;
  69.  
  70. var_dump($var->getKeywords());
  71.  


Подскажите пожалуйста.

Задача в том, чтобы добавить в класс: title, массив keywords, и путей css.
Конструктор должен принимать обязательные параметры: title, keywords, и не обязательный: массив css.
И методы:
addKeywords - принимает массив строковых значений, которые добавляет вконец массива свойства keywords.
addCssFile - принимает гиперссылку на css файл в формате string и добавляет вконец массива cssFiles
Бок в том, что если делать через конструктор, раскоментить строки, то все получается. Но в задаче стоит сделать методы.
2. andrewkard - 27 Сентября, 2016 - 18:52:15 - перейти к сообщению
так?
PHP:
скопировать код в буфер обмена
  1.  
  2. public function addKeywords($keywords){
  3.                 $this->keywords = array_merge($this->keywords, $keywords);
  4.         }
  5.  


PHP:
скопировать код в буфер обмена
  1.  
  2. $page = new HtmlPage('тайтлтест', $arr_key, $arr_css);
  3. $page ->addKeywords($keywords);
  4.  
  5.  
  6.  
3. Rio - 27 Сентября, 2016 - 18:53:14 - перейти к сообщению
Первую ошибку я понял.

При первичной инициализации обьекта:
PHP:
скопировать код в буфер обмена
  1.  
  2. $var = new HtmlPage('тайтлтест', $arr_key, $arr_css);
  3.  

аргументы будут попадать в конструктор и там с ними можно работать.
А какой смысл тогда, чтоб в конструкторе был обязательным массив keywords и метод еще был. Чтоб было два варианта добавления? При первичной инициализации и просто при обращению к методу?
(Добавление)
andrewkard пишет:
так?
PHP:
скопировать код в буфер обмена
  1.  
  2. public function addKeywords($keywords){
  3.                 $this->keywords = array_merge($this->keywords, $keywords);
  4.         }
  5.  


PHP:
скопировать код в буфер обмена
  1.  
  2. $page = new HtmlPage('тайтлтест', $arr_key, $arr_css);
  3. $page ->addKeywords($keywords);
  4.  
  5.  
  6.  

В общем я тупил с первичной инициализацией, когда ничего не записывалось. Когда разобрался все стало понятно, но да, массив перезаписывался и Ваша помощь была кстати. Спасибо!

 

Powered by ExBB FM 1.0 RC1