Новичок ООП: доступ к полям непосредственно по сравнению с передачей объектов как параметры

Вы должны использовать эту библиотеку для мультизагрузки в CI. https://github.com/stvnthomas/CodeIgniter-Multi-Upload

. Установка Просто скопируйте файл MY_Upload.php в свой каталог библиотеки приложений.

Использование: функция test_up в контроллере

public function test_up(){
if($this->input->post('submit')){
    $path = './public/test_upload/';
    $this->load->library('upload');
    $this->upload->initialize(array(
        "upload_path"=>$path,
        "allowed_types"=>"*"
    ));
    if($this->upload->do_multi_upload("myfile")){
        echo '
';
        print_r($this->upload->get_multi_upload_data());
        echo '
'; } }else{ $this->load->view('test/upload_view'); }

}

upload_view.php в папке apps / view / test

5
задан Al C 27 May 2009 в 17:49
поделиться

6 ответов

Одна из проблем при передаче Object2 в Object1 заключается в том, что вы создаете зависимость между Object2 и Object1. Единственный способ, которым Object1 может получить необходимые данные, - это иметь ссылку на Object2.

Так вот, иногда вы этого хотите, но в большинстве случаев нет. Так что вам, скорее всего, лучше просто передать нужное значение в качестве параметра методу, чем передавать экземпляр Object2.

9
ответ дан 18 December 2019 в 09:52
поделиться

Обычно цель состоит в том, чтобы минимизировать связь между объектами.

Давайте использовать простой пример, где у меня есть три объекта; AppController, который содержит ссылку на DataController и MainWindowController. Вам необходимо передать DataController.Data в MainWindowController, чтобы вы могли отображать значения в таблице в главном окне. Вы можете передать DataController в MainWindowController в качестве параметра метода или сделать DataController переменной экземпляра в MainWindowController. Чтобы свести к минимуму взаимосвязь, самый простой способ для AppController - передать данные непосредственно в MainWindowController, поэтому ему не нужно ничего знать о DataController.

2
ответ дан 18 December 2019 в 09:52
поделиться

Если методу требуется только одно значение свойства из Object2, было бы лучше передать это значение свойства напрямую. Если методу требуется доступ ко многим свойствам или другим функциям Object2, передача ссылки на Object2 будет уместной.

Существуют исключения - если вам нужно защитить сигнатуру метода (т.е. она является общедоступной), и вы предполагаете дополнительные использование Object2 в методе в будущем, передача ссылки на объект может быть уместной.

Предыдущие ответы также содержат веские аргументы - вы должны учитывать связь Object1 и Object 2, когда принимаете это решение.

3
ответ дан 18 December 2019 в 09:52
поделиться

Все дело в том, знает ли Object1 об Object2. В ООП часть хорошего дизайна состоит в том, чтобы объекты хранили как можно МЕНЬШЕ количество информации, что позволяет им вести себя должным образом. Таким образом, проблема в основном сводится к следующему: нужно ли Object1 знать о существовании Object2 (то есть нужен ли экземпляр Object2 для существования) или может сообщить о существовании экземпляра Object2? Обычно в ООП вы хотите больше склоняться к последнему, чем к первому.

Однако, при этом, в ситуации, когда Object1 может работать с данными, которые поступают от Object2, лучшим способом, вероятно, было бы иметь метод Object1 который работает с данными типа свойства объекта Object2; таким образом вы отделяете Object1 и Object2, в этом Object1 не имеет зависимости от Object2 для предоставления данного свойства определенным образом; телефонный код может соединить два.

1
ответ дан 18 December 2019 в 09:52
поделиться

Да, то, что говорит Рэндольфо, верно.

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

Теперь ваш пример второстепенный, но представьте 5 , 10, 100 объектов, вызывающих друг друга через параметры, это неприятная работа.

1
ответ дан 18 December 2019 в 09:52
поделиться

Взгляните на Encapsulation в Википедии.

] Инкапсуляция [..] защищает целостность компонента, не позволяя пользователям переводить внутренние данные компонента в недопустимое или несогласованное состояние.

1
ответ дан 18 December 2019 в 09:52
поделиться