За последние 24 часа нас посетили 16997 программистов и 1744 робота. Сейчас ищут 948 программистов ...

Как определить свойство-объект в классе?

Тема в разделе "PHP для новичков", создана пользователем borus, 4 июл 2017.

  1. borus

    borus Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Здравствуйте!

    Пробовал такой код:
    Код (Text):
    1. if (!class_exists('VmImage')) require(VMPATH_ADMIN.DS.'helpers'.DS.'image.php');
    2. class Vm3delpicsModelFSDelete extends JModelList {
    3.     public $vm_media = new VmImage();
    4. ...
    выдает ошибку
    Пробовал такой:
    Код (Text):
    1. if (!class_exists('VmImage')) require(VMPATH_ADMIN.DS.'helpers'.DS.'image.php');
    2.  
    3. class Vm3delpicsModelFSDelete extends JModelList {
    4.     public $vm_media;
    5.     public function get_product_path($file){
    6.         $this->vm_media = new VmImage();
    7. ...
    тоже выдает ошибку. Как выйти из ситуации и создать свойство класса, в котором будет храниться объект, который далее будет использоваться методами класса?
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.809
    Симпатии:
    1.332
    Адрес:
    Лень
  3. borus

    borus Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Спасибо. Поясните, пожалуйста, куда в рамках выше показанного кода я должен поместить
    Код (Text):
    1. spl_autoload_register(function ($class) {
    2.     include VMPATH_ADMIN.DS.'helpers'.DS.'image.php';
    3. });
    До определения класса Vm3delpicsModelFSDelete ?
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.596
    Симпатии:
    1.764
    Какую ошибку выдаёт второй код? Первый - по определению неправильный, инициализировать при объявлении свойства класса можно только константами.
     
  5. borus

    borus Активный пользователь

    С нами с:
    16 апр 2012
    Сообщения:
    161
    Симпатии:
    0
    Спасибо. Не знаю почему, но сейчас второй вариант работает, хотя вроде бы такой, какой был:
    PHP:
    1. <?php
    2. defined("_JEXEC") or die();
    3.  
    4. if(!defined('DS')) define('DS', DIRECTORY_SEPARATOR);
    5. if (!class_exists( 'VmConfig' )) require(JPATH_ROOT.DS.'administrator'.DS.'components'.DS.'com_virtuemart'.DS.'helpers'.DS.'config.php');
    6. if (!class_exists('VmImage')) require(VMPATH_ADMIN.DS.'helpers'.DS.'image.php');
    7.  
    8. class Vm3delpicsModelFSDelete extends JModelList {
    9.     public $product_files = array();
    10.     public $resized_files = array();
    11.     public $vm_media;
    12.  
    13.     //функция получения массива с именами файлов из заданной папки
    14.     public function select_files($folder){
    15.         $fp=opendir($folder);
    16.         $internal_array = array();
    17.         while (false !== ($file = readdir($fp))) {
    18.             if(is_file($folder."/".$file)) {
    19.                 $internal_array[] = $file;
    20.             }
    21.         }
    22.         closedir($fp);
    23.         return $internal_array;
    24.     }
    25.     //функция получения названия детального изображения по имени превью
    26.     public function get_product_path($file){
    27.         $this->vm_media = new VmImage();
    28.         list($this->vm_media->file_name, $this->vm_media->file_extension) = explode(".",$file);
    29.         $product_name = $this->vm_media->createThumbName(90,90);
    30.         $suffix = substr($product_name, -(strlen($product_name)-strlen($this->vm_media->file_name)));
    31.         return strstr($this->vm_media->file_name,$suffix,true). $this->vm_media->file_extension;
    32.     }
    33.  
    34.     protected function getListQuery(){//то, что отображается в виде по умолчанию
    35.         $union_select = '';
    36.         $this->product_files = $this->select_files(JPATH_ROOT.DS.'images/stories/virtuemart/product/');
    37.         $var = $this->select_files(JPATH_ROOT.DS.'images/stories/virtuemart/product/resized/');
    38.         $this->resized_files = array_combine($var, array_map("get_product_path",$var));
    39. ...
    40.     }
    41. }
    42. ?>
     
    #5 borus, 4 июл 2017
    Последнее редактирование: 4 июл 2017
  6. t1grok

    t1grok Новичок

    С нами с:
    29 янв 2017
    Сообщения:
    119
    Симпатии:
    32
    Вы в array_map пытаетесь применить функцию, а подразумеваете метод:
    PHP:
    1. array_map([$this, "get_product_path"],$var)
     
    borus нравится это.