В PHP как вы создаете многократно используемые объекты? Есть ли лучший способ для этого? Что Вы предпочитаете? - PullRequest
7 голосов
/ 01 сентября 2011

Я создаю несколько повторно используемых объектов в php, и я хотел знать, каков наилучший способ их создания. Ниже у меня есть 2 примера различных способов сделать это.

Class Uploader{
    public $Filename;
    public $Directory;

    function upload(){
        upload_file($this->Filename, $this->Directory)
    }
}

// Then use the class above like this.
$u = new Uploader;
$u->Filename = 'foo.png'; // Set all the props
$u->Directory = 'bar/'    //  ^   ^   ^    ^
$u->upload();             // Then Execute

Или лучше сделать это ...

Class Uploader {
    function uploader($filename, $directory){
        upload_file($filename, $directory)
    }
}

// Then use the class above like this.
$u = new Uploader;
$u->uploader('foo.png', 'bar/') // Obviously much less code, All in One.

Из этих двух методов, какой из них предпочтителен, является ли их разница в скорости или какой-либо выигрыш от использования одного над другим?
Я предпочитаю пример № 1, но является ли это наилучшей практикой для этого?

Ответы [ 4 ]

7 голосов
/ 01 сентября 2011

Почему вы не можете сделать и то и другое?

class Uploader
{
  public
    $filename,
    $directory;

  public function __construct( $name = '', $dir = '', $autoUpload = false )
  {
    $this->filename = $name;
    $this->directory = $dir;
    if ( $autoUpload )
    {
      $this->upload()
    }
  }

  public function upload()
  {
    //check your values
    ...code...
    upload_file( $this->filename, $this->directory );
  }
}

С помощью этой техники вы можете автоматически загрузить файл просто с помощью:

$uploader = new Uploader( $name, $dir, true);

или вы можете вручную с помощью:

$uploader = new Uploader();
$uploader->filename = $name;
$uploader->directory = $dir;
$uploader->upload();
6 голосов
/ 01 сентября 2011

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

4 голосов
/ 01 сентября 2011

Даниэль Перейра прав насчет производительности.

Чтобы смешать два примера (исполнение и повторное использование), вы можете попробовать:

Class Uploader{
    public $Filename;
    public $Directory;

    function Uploader($this->Filename, $this->Directory){
       upload_file($this->Filename, $this->Directory);
    }
}
$a = new Uploader('foo.png','bar');
echo $a->Filename; //foo.png
echo $a->Directory; //bar

Это должно быть на самом деле (из-за ошибки):

Class Uploader{
        public $Filename;
        public $Directory;

        function Uploader($Filename, $Directory){
            $this->Filename = $Filename;
            $this->Directory = $Directory;
           upload_file($this->Filename, $this->Directory);
        }
    }
2 голосов
/ 01 сентября 2011

Если вы хотите сделать настоящий OO, первый пример довольно хорош. Другое предложение будет следующим:

Class Uploader{
    private $Filename;
    private $Directory;

    function upload(){
        upload_file($this->Filename, $this->Directory)
    }

}

Затем вы можете создавать методы setFileName и setDirectory, чтобы абстрагироваться от настройки этих полей для дальнейшего использования.

Вы также можете создать конструктор с этими полями в нем. Множество способов решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...