テーマ、知りたいこと
適切な理解ではなさそうですが、どうやら use
を使うと引数が減らせるみたいで、使うべきかどうか悩んでいます。
背景・状況
比べたいのは下記2つの実行パターンです。
どうやら ➀ use を使って実行 の方だと executeWithLock()
に渡す引数が1つ少なくて済む (第四引数が不要らしい) のです。
でも ChatGPT いわく、➁ use を使わず実行 のように第四引数に明示する方が近年の開発現場では推奨されるとかなんかでした。
経験が浅いのでどうすべきなのか迷っている状況です。
どういうときにどちらを使うと良いのが、ご意見頂けますと幸いです。
実行パターン
➀ use を使って実行
php
1class TagCompositeMapper 2{ 3 final public function createWithLock(TagComposite $tagComposite): TagComposite 4 { 5 $lockName = '$tagCompositeから適切なロック名を作る'; 6 $lockTimeout = 1; 7 8 $callBack = function () use ($tagComposite) { // -> 🔴use を使う 9 return $this->create($tagComposite); 10 }; 11 12 return (new LockUtil(new LockManager()))->executeWithLock( 13 $lockName, 14 $callback, 15 $lockTimeout, 16 // $tagComposite // -> 🔴use を使うとこの引数が不要 17 ); 18 } 19}
➁ use を使わず実行
php
1class TagCompositeMapper 2{ 3 final public function createWithLock(TagComposite $tagComposite): TagComposite 4 { 5 $lockName = '$tagCompositeから適切なロック名を作る'; 6 $lockTimeout = 1; 7 8 $callback = function (TagComposite $tagComposite) { // -> 🔵use を使わない 9 return $this->create($tagComposite); 10 }; 11 12 return (new LockUtil(new LockManager()))->executeWithLock( 13 $lockName, 14 $callback, 15 $lockTimeout, 16 $tagComposite // -> 🔵use を使わないとこの引数が必要 17 ); 18 } 19}
汎用部分のコード
上記で use
を使うか使わないかで下記のように汎用部分のコードに違いが出ます。
これは小さな違いなのでどっちでも良さそうな感じはします。
php
1class LockUtil 2{ 3 private LockManager $lockManager; 4 5 public function __construct(LockManager $lockManager) 6 { 7 $this->lockManager = $lockManager; 8 } 9 10 final public function executeWithLock( 11 string $lockName, 12 callable $callback, 13 int $lockTimeout = 10, 14 ...$args // -> 🔵use を使わないときだけこれが必要 15 ) { 16 // ロック中 (ニアミスで他者が実行中) なら $lockTimeout まで待ってから throw される 17 if (!$this->lockManager->acquireLock($lockName, $lockTimeout)) { 18 throw new \RangeException(__METHOD__ . ": Failed to acquire lock: {$lockName}"); 19 } 20 21 try { 22 return $callback(); // -> 🔴use を使うときはこう 23 return $callback(...$args); // -> 🔵use を使わないときはこう 24 } finally { 25 $this->lockManager->releaseLock($lockName); 26 } 27 } 28}
以上です。
これまで use
をほぼ使ったことがないためなんかヘンなことを言っているかもしれませんが、よろしくお願い致します。
バージョン
php 8.2 を利用していますが、もし「8.4 ならこうできる」などあればぜひ併せてご意見募集です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。