พูดง่ายๆก็คือเอาท์พุทของอันสุดท้ายและท่อไปยังอันต่อไป sorta เหมือน bash cat ./file | grep -e 'waldo'
คุณสามารถติดตั้งแพ็คเกจผ่านนักแต่งเพลง:
composer require inmanturbo/pipes หรือเพียงแค่คัดลอกหรือดาวน์โหลดไฟล์ functions.php จากที่เก็บนี้
require __DIR__ . ' /../vendor/autoload.php ' ;
use function Inmanturbo Pipes pipe ;
$ addOne = fn ( $ number = 0 ) => $ number + 1 ;
$ five = pipe ( $ addOne ) // 1
-> pipe ( fn ( $ number ) => $ number + 1 ) // 2
-> pipe ( $ addOne ) // 3
-> pipe ( $ addOne ) // 4
-> thenReturn (); // 4ไม่ชะลอการดำเนินการ
$ fifty = pipe ( 1 );
while ( $ fifty -> result () < 50 ) {
$ fifty -> pipe ( fn ( $ number ) => ++ $ number );
}
echo $ fifty -> result ();
// 50
คุณยังสามารถผ่านคลาสหรือสตริงคลาส
use function Inmanturbo Pipes pipe ;
class Subtract
{
public function __invoke ( $ number )
{
return $ number - 1 ;
}
}
$ addOne = fn ( $ number = 0 ) => $ number + 1 ;
$ six = pipe ( $ addOne , 1 )
-> pipe ( $ addOne )
-> pipe ( $ addOne )
-> pipe ( $ addOne )
-> then ( fn ( $ number ) => ++ $ number );
$ five = pipe ( $ six )
-> pipe (Subtract::class)
-> thenReturn ();
$ three = pipe ( new Subtract , $ five )
-> pipe ( new Subtract )
-> thenReturn ();ผลลัพธ์สามารถส่งคืนได้สามวิธี:
then() หรือ thenReturn() ทั้งการโทรกลับขั้นสุดท้ายและส่งคืนผลลัพธ์หรือ result() ซึ่งเพียงส่งคืนผลลัพธ์
$ addOne = fn ( $ number = 0 ) => $ number + 1 ;
$ six = pipe ( $ addOne , 1 )
-> pipe ( $ addOne )
-> pipe ( $ addOne )
-> pipe ( $ addOne )
-> then ( fn ( $ number ) => ++ $ number );
$ sixAgain = pipe ( $ addOne , 1 )
-> pipe ( $ addOne )
-> pipe ( $ addOne )
-> pipe ( $ addOne )
-> thenReturn ( fn ( $ number ) => ++ $ number );
$ five = pipe ( $ addOne , 1 )
-> pipe ( $ addOne )
-> pipe ( $ addOne )
-> pipe ( $ addOne )
-> result (); คุณสามารถกลับ halt() จากการโทรกลับเพื่อหยุดโซ่ halt ใช้ผลลัพธ์ที่เป็นตัวเลือกเป็นอาร์กิวเมนต์ที่คุณสามารถส่งผ่านเป็น result() ของห่วงโซ่ การโทรไปที่ ->pipe() จะไม่ส่งผลกระทบต่อผลลัพธ์สุดท้าย
use function Inmanturbo Pipes { pipe , halt };
$ fortyFive = pipe ( 1 );
$ count = 1 ;
while ( $ count < 50 ) {
$ fortyFive -> pipe ( fn ( $ number ) => $ number < 45 ? ++ $ number : halt ( $ number ));
$ count ++;
}
echo $ fortyFive -> result ();
// 45
echo $ fortyFive -> pipe ( fn ( $ number ) => ++ $ number )-> result ();
// 45คุณยังสามารถโทร Halt บนท่อด้วยตัวเอง
use function Inmanturbo Pipes { pipe , halt };
$ fortyFive = pipe ( 1 );
$ count = 1 ;
while ( $ count < 50 ) {
if (( $ number = $ fortyFive -> result ()) >= 45 ) {
$ fortyFive -> halt ( $ number );
}
$ fortyFive -> pipe ( fn ( $ number ) => ++ $ number );
$ count ++;
}
echo $ fortyFive -> result ();
// 45
echo $ fortyFive -> pipe ( fn ( $ number ) => ++ $ number )-> result ();
// 45 คุณสามารถดำเนินการต่อท่อด้วยเรซูเม่ pipe()->resume() ใช้การโทรกลับเสริมและทำงานเช่นเดียวกับ pipe()->pipe() หากผ่านการโทรกลับ
use function Inmanturbo Pipes { pipe , halt };
$ fortySix = pipe ( 1 );
$ count = 1 ;
while ( $ count < 50 ) {
if (( $ number = $ fortySix -> result ()) >= 45 ) {
$ fortySix -> halt ( $ number );
}
$ fortySix -> pipe ( fn ( $ number ) => ++ $ number );
$ count ++;
}
echo $ fortySix -> result ();
// 45
echo $ fortySix -> resume ( fn ( $ number ) => ++ $ number )-> result ();
// 46 แพ็คเกจนี้ไม่จำเป็นต้องใช้ Laravel ในการใช้ Pipe หรือ hop() แต่ hop() (Pipe สั่งซื้อสูงกว่า) เป็นฟังก์ชั่นการสั่งซื้อที่สูงขึ้นสำหรับการทำงานกับผู้ช่วยท่อของ Laravel ฟังก์ชั่นการสั่งซื้อที่สูงขึ้นนี้ใช้การโทรกลับซึ่งใช้อาร์กิวเมนต์เดียวและปิด $callback สำหรับคุณในการปิดซึ่งใช้ function($next, $passable)
use Illuminate Pipeline Pipeline ;
use function Inmanturbo Pipes hop ;
class Add {
public function add ( $ number )
{
return $ number + 1 ;
}
}
class InvokeAdd {
public function __invoke ( $ number )
{
return $ number + 1 ;
}
}
$ five = ( new Pipeline )-> send ( 1 )
-> pipe ( hop ( fn ( $ number ) => $ number + 1 ))
-> pipe ( hop ( new InvokeAdd ))
-> pipe ( hop (InvokeAdd::class))
-> pipe ( hop ( fn ( $ number ) => ( new Add )-> add ( $ number )))
-> thenReturn ();
// 5 คุณสามารถเลือกผ่าน middleware ตัวเดียวเป็นอาร์กิวเมนต์ที่สองที่จะ hop() และมันจะได้รับการเรียกก่อนอาร์กิวเมนต์แรกซึ่งช่วยให้คุณสามารถตรวจสอบได้ว่าท่อควรหยุดก่อนที่ $callback เคยถูกดำเนินการ
$ limitThreeMiddleware = function ( $ number , $ next ) {
if ( $ number >= 3 ) {
Log:: info ( ' Limit hit ' );
return $ number ;
}
return $ next ( $ number );
};
$ five = ( new Pipeline )-> send ( 1 )
-> pipe ( hop ( fn ( $ number ) => $ number + 1 , $ limitThreeMiddleware ))
-> pipe ( hop ( new InvokeAdd , $ limitThreeMiddleware ))
// Limit hit
-> pipe ( hop (InvokeAdd::class, $ limitThreeMiddleware ))
-> pipe ( hop ( fn ( $ number ) => ( new Add )-> add ( $ number ), $ limitThreeMiddleware ))
-> thenReturn ();
// 3