多くの人は、OOPで使われているグローバル関数はテストできないので、悪い考えだと主張しています。代わりに私は何を使うべきですか?いつも依存注射?
私はいくつか持っているツールボックス特に、便利な多くの小さな機能を持つ。例えば。文字列を変換したり、計算をしたり、厄介なHTMLなどを整理したりすることができます。コード内で使用すると非常に便利です。たとえば:代わりに、OOPのグローバル関数は何ですか?
public function copyUploadedFile($filename, $dst_dir)
{
$filename = convertToSimpleString($filename);
if (!$filename) $error = displayError('Filename is empty!');
$extension = getFileExtension($filename);
$dst_dir = convertToSimpleString($dst_dir);
if (!isDir($dst_dir)) createDir($dst_dir);
....
}
依存性の注入は、コードが複雑になり、常にさえ非常に小さな仕事のための新しいオブジェクトを作成するために強制的:あなたは2種類の機能を区別する必要があり、すべての
$file = new FileManager(new ErrorHandler, new StringConverter, new DirManager ...)
public function __construct(ErrorHandler $error_handler, StringConverter $string_converter, DirManager $dir_manager, ...)
{
$this->error_handler = $error_handler;
$this->string_converter = $string_converter;
$this->dir_manager = $div_manager;
...
}
ユニットテストを書いていますか? – DanielO
コードを書き直す必要があり、単体テストを行う予定です。 –
単体テストの問題によると、スタティック関数とグローバル関数をスタブしてモックするライブラリAspectMock(https://github.com/Codeception/AspectMock)があります:https://github.com/Codeception/AspectMock –