บทความ

กำลังแสดงโพสต์ที่มีป้ายกำกับ php

[PHP] การส่งข้อมูล raw JSON body ด้วย Guzzle

 การส่งข้อมูล raw JSON body (แบบที่ใช้ใน Postman) ด้วย Guzzle $url = 'https://www.example.com'; $client = new \GuzzleHttp\Client(); $data = [//ข้อมูลที่ต้องการส่ง 'foo' => 'bar', 'name' => 'test', ]; $response = $client->request("POST", $url, [ 'json' => $data, 'headers' => [ 'Content-Type' => 'application/json; charset=utf-8', 'Accept' => 'application/json', ], ]);

[PHP] Trait ใช้งานยังไง?

 Trait ใน PHP จะเหมือนกับเป็นลูกผสมระหว่าง class แม่ที่ทำมาให้ extends และ interface โดยที่ trait นั้นสามารถถูกเรียกใช้ได้หลาย trait ใน class เดียวกัน เหมือนการ implements interface แต่ตัว trait นั้นไม่ต้องประกาศ function เป็น abstract เลย ประโยชน์ของ trait คือการที่เรารวมเอา "ลักษณะ" ของโค้ดที่ใช้งานบ่อยมาไว้ในที่เดียวเพื่อให้สะดวกต่อการนำไปใช้ซ้ำ คุณสมบัติของ Trait เรียกใช้ได้มากกว่า 1 trait เหมือนการ implements interface อยากประกาศ function หรือ property ก็ทำได้หมด ทั้ง public, protected, private หรือ static (ข้อนี้จะให้ความรู้สึกเหมือน extends class) การเรียกใช้ trait จะเสมือนกับการก๊อปโค้ดทั้งยวงใน trait ไปแปะใน class ที่เรียกใช้ และใช้งานได้ตามนั้นเลย โดยเฉพาะ scope หากประกาศเป็น private ไว้ ก็จะใช้ได้เฉพาะภายใน class ที่เรียกใช้ trait <?php trait ExampleTrait { private privateFunc() { echo 'This is private function'; } } class ParentClass { use ExampleTrait; //เรียกใช้ trait หากมีมากกว่า 1 ขั้นด้วย , public function parentFunc() {

[PHP] Interface มีไว้ทำอะไร?

มาถึงคราวของ Interface หลังจากจบบทความ Abstract class ไป โดยตัว Interface จะมีความแตกต่างตรงที่ function ทุกตัวที่อยู่ในนี้ต้องเป็น public และ abstract function ทั้งหมด ซึ่งหน้าที่ของ Interface คือการกำหนดความสามารถบางอย่างให้กับ Class ที่ implements Interface ไปใช้ ซึ่งสามารถ implements ได้มากกว่า 1 Interface มาดูตัวอย่างโค้ดกัน โค้ดชุดนี้นำมาจากเว็บ  W3Schools Online Web Tutorials  โดยในโค้ดจะเป็น class เกี่ยวกับสัตว์ Interface Animal บอกว่า สัตว์สามารถทำเสียงได้ แต่จะทำเสียงอะไรก็ขึ้นกับ class ของสัตว์ที่ implements ไปนั่นเอง <?php // Interface สัตว์บอกว่าสัตว์ทำเสียงร้องได้ interface Animal { public function makeSound(); } // Class definitions class Cat implements Animal { public function makeSound() { echo " เมี้ยว "; } } class Dog implements Animal { public function makeSound() { echo " โฮ่ง "; } } class Mouse implements Animal { public function makeSound() { echo " จี๊ด "; } } // สร้าง object ของ class สัตว์ต่าง ๆ

[PHP] Abstract Class มีไว้ทำอะไร?

 บทความนี้จะออกแนววิชาการหน่อย ส่วนตัวคิดว่ามีโอกาสน้อยที่เราจะได้เขียน Abstract class ไว้ใช้เอง ส่วนมากจะเจอตาม library หรือ framework ต่าง ๆ ที่ทำมาให้คนอื่นใช้เสียมากกว่า Abstract Class คืออะไร Abstract class คือ class ที่"ไม่สมบูรณ์" กล่าวคือมี abstract function ประกอบอยู่ (จริง ๆ ถึงไม่มีก็ประกาศเป็น Abstract class ได้ แต่มักไม่ทำกัน แต่ถ้ามี abstract function เมื่อไหร่ compiler จะบังคับให้เราประกาศเป็น Abstract class ทันที) โดย abstract function จะเป็น function ที่ถูกบังคับให้ class ลูก override function ทับเมื่อ extends abstract class มาใช้ ประโยชน์ของมันคือการวาง guideline ให้คนอื่นมาใช้เพื่อพัฒนาโค้ดของเราต่อไป อาจจะมีบาง function ที่ต้องโดนเรียกใช้แน่ ๆ แต่ content ของ function จะขึ้นอยู่กับ class ลูกที่ extends ไป ยกตัวอย่าง <?php abstract class LivingThings { protected $scientificName;//สิ่งมีชีวิตมีชื่อวิทยาศาสตร์ abstract public function hasLegs() : boolean; abstract public function canFly() : boolean; } // Child classes class Cobra extends Living

PHP 8.0 มาแล้ว!!!

รูปภาพ
 บทความนี้จะเขียนเฉพาะหัวข้อที่ส่วนตัวคิดว่าเป็นสิ่งที่น่าสนใจสำหรับ PHP 8.0 จะไม่ครอบคลุมทั้งหมด แต่จะทิ้งลิงก์สำหรับข้อมูลตัวเต็มไว้ให้ท้ายบทความครับ Named arguments (ใช้ชื่อ argument ในการส่งค่าได้) ในตัวอย่างนี้ดูแล้วอาจจะงงสักหน่อย ต้องมาดูที่ว่า function นี้ถูกประกาศยังไง ใน feature นี้อธิบายง่าย ๆ คือเราสามารถ "เลือก" ที่จะส่ง argument ยังไงก็ได้หากมีการกำหนดชื่อของ argument ที่ส่ง ไม่จำเป็นต้องลำดับ argument ด้วย ในตัวอย่างของ PHP 8 จะเห็นว่าเขาเลือกส่ง $string (อันนี้ไม่ได้ใช้ Named argument ส่งแบบปกติ) และ double_encode (อันนี้มีการใช้ละ คือเลือกส่งเฉพาะ double_encode เป็น false) ส่วนตัวแปรที่เหลือปล่อยให้เป็นค่า default ไปตามใน doc ครับ Constructor property promotion (ประกาศ property ผ่าน constructor) feature นี้ตรงไปตรงมาตามภาพคือไม่จำเป็นต้องประกาศ property ด้านบนของ class แล้ว ประกาศผ่าน argument ของ constructor รวมถึง assign ค่าไปในตัวให้ด้วยเลยเมื่อส่งค่าเข้ามา Match expression ครั้งหนึ่งในชีวิต PHP programmer น่าจะมีคิดกันบ้างว่าทำไมต้องมาพิมพ์ break; หลาย ๆ

[Laravel] วิธีทำ Helper function ไว้ใช้เอง

รูปภาพ
 ในบทความนี้ผมจะถือว่าทุกคนมีความรู้พื้นฐานเกี่ยวกับ Laravel Framework มาแล้วระดับนึงในเรื่องของโครงสร้างไฟล์ แต่อย่างไรก็ตาม หากสงสัยก็คอมเม้นท์ถามไว้ได้ครับ มาเริ่มกันเลย ก่อนอื่นผมจะสร้าง folder ชื่อ Helpers ไว้ภายใต้ folder app ของ framework เพื่อง่ายจ่อการจำแนกไฟล์ จากนั้นสร้างไฟล์ขึ้นมา ตั้งชื่อตามหน้าที่ของ function ด้านในไฟล์นั้น ๆ ในตัวอย่างนี้ผมจะสร้างไฟล์ชื่อว่า NumberHelper.php ไว้จัดการกับตัวเลขต่างๆ ต่อมาผมจะสร้าง function ชื่อว่า numberInRange ไว้ตรวจเช็คว่าตัวเลขที่ใส่เข้ามามีค่าระหว่าง(between)อีก 2 ตัวเลขหรือไม่ โดยมีเนื้อหาของ function ดังนี้ if (! function_exists ( 'numberInRange' )) {      function numberInRange ( $val , $min , $max ) {          return ( $val >= $min && $val <= $max );     } } function_exists มีไว้เพื่อป้องกันการทับซ้อน function ที่มีอยู่แล้วในโปรเจ็กต์ของเรา หากไม่มี function จึงค่อยประกาศ function ถัดมาให้เปิดไฟล์ที่ชื่อว่า composer.json ซึ่งอยู่ที่ root ของโปรเจ็กต์ ในไฟล์ เลื่อนลงจนถึงส่วนของ autoload เพิ่มโค้ดส่วนนี