• PHP

    OOP ซีรี่ย์ – Public vs. Private

    สองคีย์เวิร์ดนี้ public, private เขาไว้สำหรับกำหนดขอบเขตการเข้าถึงฟังก์ชั่นหรือตัวแปรภายในออบเจ็ก ดอตอยอ View the code on Gist. ตอนพระเจ้าสร้างออบเจ็กขึ้นมา พระเจ้าจะกำหนดไว้แล้วว่า ฟังก์ชั่นไหนไม่ให้เรียกจากภายนอก ฟังก์ชั่นไหนให้เรียกจากภายนอกได้และเรียกจากภายในก็ได้ เหตุผลที่ทำอย่างนี้น่ะเหรอ ก็เพื่อจำกัดกรอบของบักให้แคบลง หรือไม่งั้นก็อาจจะเพราะอินดี้ก็ได้ เอ้า… ทำไมอะเราไม่ให้เรียกใช้ฟังก์ชั่นนี้จากภายนอกอะ เราผิดเหรอ ผมเคยเจอบ่อย ตอนที่เขียนปลักอินติดต่อกับวูคอมเมิร์ส เรียกฟังก์ชั่นไป ตอบกลับเออเร่อมาว่าฟังก์ชั่นนี้ไม่ให้เรียกจากภายนอก เป็น private อะไรอะ… ลองเข้าไปอ่านโค้ดของวูคอมเมิร์สดูก็ไม่น่าจะต้องจำกัดสิทธิ์การเข้าถึง ผมถึงบอกว่าบางทีก็เพราะพระเจ้าอินดี้ ก็แล้วแต่แหละ เขียนๆไปมีประสบการณ์เยอะๆ จะรู้เองว่า อ๋อฟังก์ชั่นนี้เราใช้ส่วนตัวภายในก็พอ เอาล่ะมาดูการเรียกใช้งานจากคลาสข้างบน View the code on Gist. เราจะได้ตัวแปร name เท่ากับ Watcharamet Srinethirothai แต่ถ้าเราเรียกอย่างนี้ เออเร่อเลยนะครับ View the code on Gist. มันจะเออเร่อตรงบรรทัด 29 เพราะว่าในคลาสประกาศฟังก์ชั้น changeName() […]

    READ MORE
  • PHP

    OOP ซีรี่ย์ – Chaining methods

    Chaining-methods จะว่ามันเป็นคุณสมบัติอันโดดเด่นของ OOP ก็ไม่ใช่ซะทีเดียว มันเป็นแค่เทคนิค ถ้าท่านเคยใช้พวกเฟรมเวิร์คมาก่อนท่านจะคุ้นกับ ตอยอ ตัวอย่างนี้มาก View the code on Gist. การเรียกเมธอดต่อๆกันเป็นแบบลูกโซ่อย่างนี้ เห็นได้ทั่วไปเมื่อท่านใช้เฟรมเวิร์ค มันดูง่าย มันดูเป็นระเบียบ มันดูล้ำ ผมเขียน laravel มาก่อน เห็นการเขียนลักษณะนี้จนชิน และผมก็เขียนอย่างนี้เหมือนกัน แต่ไม่เคยตั้งคำถามว่าไอ้คนทำเฟรมเวิร์คมันทำได้อย่างไรให้เราสามารถเรียกฟังก์ชั่นต่อๆกันแบบนี้ มีเฉลย ง่ายๆกากๆเลย ดูในโค้ดตรงคำสั่ง return มัน return $this; ซึ่งมันจะคืนค่ากลับไปเป็น object ตัวมันเอง เพราะฉะนั้นมันก็สามารถเรียกฟังก์ชั่นอื่นต่อๆไปได้ View the code on Gist. อ๋อ อย่างนี้นี่เอง

    READ MORE
  • PHP

    OOP ซีรี่ย์ – The $this keyword

    สั้นๆง่ายๆ คำว่า $this นี่ไว้ใช้สำหรับเรียกฟังก์ชั่นหรือตัวแปรภายในคลาส  ดอตอยอ ดูตัวอย่าง View the code on Gist. แค่นี้แหละ ไม่มีคำอธิบายมากกว่านี้ เพราะหน้าที่มันมีแค่นี้ ถามว่าทำไมไม่เรียกมันตรงๆ คือไม่ต้องมี $this-> มาคั่นข้างหน้าน่ะ? จากคำอธิบายที่อ่านๆมา เขาบอกว่า เอาคำว่า $this-> มาคั่นหน้าฟังก์ชั่นหรือตัวแปรสักหน่อย เพื่อจะได้สังเกตุง่ายๆว่า เนี่ยตัวแปรนี้มันอยู่ในคลาสนี่แหละ เนี่ยฟังก์ชั่นนี้มันอยู่ในคลาสนี่แหละ ไม่ต้องไปหาไกล มันบอก scope พี่ ซาโขบบบบบบ ใจ๋ ผมว่านะถ้าเขาจะทำให้ไม่ต้องมี $this-> เขาก็น่าจะทำได้นะ ตอนสร้างภาษา แต่จากเหตุผลที่เขาให้มา ผมยอมรับได้นะ ที่บอกว่าเพื่อให้เราหาฟังก์ชั่นได้ง่ายขึ้น เพราะรุ้ว่ามันอยู่ในคลาสนี้ ผมให้ผ่าน คุณลองนึกถึงภาพระบบใหญ่ๆที่มัน include ไฟล์เข้ามาทีเป็นสิบ หาฟังก์ชั่นกันมึน ว่ามันมาจากไฟล์ไหน เอาล่ะมีข้อสังเกตให้สังเกตุ View the code on Gist. ตัวแปรเมื่อถูกเรียกด้วย $this จะไม่มี […]

    READ MORE
  • General

    OOP ซีรี่ย์ – Classes and objects

    เมื่อเราย่างเท้าเข้าสู่โลกของการเขียนโปรแกรมเชิงวัตถุ (อูววววว) คำที่เราจะได้ยินจนชำนาญคือคำว่า class และ object คลาสก็คือโค้ดก้อนหนึ่งที่ถูกหุ้มด้วยคำว่า  class View the code on Gist. ถ้าจะอธิบายตามหลักการก็คือ ให้เราจินตนาการทุกอย่างที่จะเกิดขึ้นในระบบเราเป็นคน เช่น ถ้าหากในระบบเราจะต้องมีอะไรที่ทำเกี่ยวข้องกับไฟล์ เราก็สร้างคนๆหนึ่งขึ้นมาในจินตนการชื่อว่า ไอ้ฟาย ไอ้ฟายนี่จะทำหน้าที่ทุกอย่างที่เกี่ยวข้องกับไฟล์ ใครอยากสร้างไฟล์ให้เรียกไอ้ฟาย ใครอยากได้พาธของไฟล์ถามไอ้ฟาย  ซึ่งถ้าหากมีคำถามว่า แล้วเราจะให้ไอ้ฟายมันทำอะไรได้บ้าง  ตอบได้อย่างเดียวเลย จะไปรู้เรอะ ในงานเขียนโปรแกรมคุณคือพระเจ้าที่จะสร้างให้คนๆนั้นทำไอ้นี่ได้ ทำไอ้นี่ไม่ได้ แล้วพระเจ้าดูจากไหนว่าจะต้องให้ไอ้ฟายมันทำอะไรได้บ้าง ก็ดูเอาจากว่าโปรแกรมมันต้องการอะไรบ้าง ถ้าโปรแกรมที่เขียนไม่ได้มีการอัปโหลดไฟล์ ก็ไม่ต้องเขียนโค้ดให้ไอ้ฟายมันอัปโหลดได้ ไม่ต้อง เขียนเผื่ออนาคตได้มั้ย! ไม่ต้อง คำว่าเผื่ออนาคตคือขยะ เอาเวลาไปนั่งเกาไข่เถอะ แล้ว object คืออะไร? object คือตัวแปรที่ใช้คำสั่ง new มาจาก class  ให้คิดเสียว่า class มันคือต้นแบบเอาไปใช้ตรงๆไม่ได้ (ถามว่าทำไมไม่ได้ เอ้า ก็คนออกแบบภาษาเขากำหนดมางั้น เรามันผู้ตาม ทำตัวเชื่องๆ) ต้องก้อปปี้ไปใช้ผ่านคำสั่ง new […]

    READ MORE
  • PHP

    OOP ซีรี่ย์

    นับจากบทความบทนี้ไปผมจะเขียนเรื่อง OOP ให้อ่านซึ่งได้รับแรงบันดาลใจมาจาก http://phpenthusiast.com/object-oriented-php-tutorials  เขาเขียนอธิบายเรื่องราวของ OOP ได้อ่านง่าย เลยคิดว่า กูเอามั่ง หัวข้อที่จะเขียนทั้งหมดมีอยู่ตามนี้  หากใครเข้ามาอ่านแรกๆมันจะไม่มีลิ้งก์นะครับ ต่อเมื่อผมเขียนเรื่องราวนั้นๆแล้ว จะมาแก้หน้านี้แล้วทำลิ้งก์แต่ละหัวข้อไปยังเนื้อหา Classes and objects The $this keyword Chaining methods & properties Public vs. Private Magic methods Inheritance in PHP Abstract classes & methods Interfaces Polymorphism Type hinting Static methods & properties Namespace Trait มี 2 หัวข้อสุดท้ายที่ในลิ้งก์นั้นไม่มี แต่ผมเพิ่มเข้ามา เพราะว่ามันก็มีอยู่ใน OOP ของ PHP ทีนี้ก่อนอื่นเรามาดูกันก่อนซิว่า ทำไมโลกนี้มันถึงต้องมี OOP […]

    READ MORE
  • General

    ติดตั้ง moodle แล้วเออเร่อฐานข้อมูล mysql – version 5.5.30 is required and you are running 5.5.5.10.1.25

    ไม่เข้าใจว่าทำไมมันต้องเออเร่อบอกว่าฐานข้อมูลของเราใหม่กว่า แต่วิธีการแก้ปัญหานี้ไม่ต้องอัปเกรดฐานข้อมูลอะไรนะครับ แค่ แก้ไฟล์ config.php ระบุตรง database ให้เป็น “mariadb” แค่นี้ก็หาย อ้างอิง : https://moodle.org/mod/forum/discuss.php?d=330272

    READ MORE
  • เพราะชีวิตไม่ได้มีแค่เรื่องเขียนโปรแกรม

    ผมฝึกภาษาอังกฤษโดยใช้ youtube

    ตอนที่ผมอยู่บ้าน ไม่ได้ฝึกภาษาอังกฤษกับฝรั่งตัวเป็นๆ ผมก็ได้อาศัย youtube เป็นเครื่องมือสำคัญ

    READ MORE
  • เพราะชีวิตไม่ได้มีแค่เรื่องเขียนโปรแกรม

    คนล้อที่สวนจตุจักร

    ผมคิดถึงคำพูดของพระพุทธเจ้าอยู่คำพูดหนึ่ง

    “อย่าทำตัวเอง ให้เป็นศัตรูของตัวเอง”

    READ MORE
  • Laravel

    Laravel ตอนที่ 9 HTTP Verb

    http verb คำนี้เราอาจจะไม่คุ้นเคย แต่อันที่จริงแล้วเราใช้มันบ่อยมาก เราใช้มันในนาม method ของฟอร์ม ใช่แล้วครับ มันคือ GET, POST เรารู้จักอยู่ 2 ตัว แต่มันไม่ได้มีแค่ 2 นะครับ มันมีมากกว่านั้น และ Laravel ก็ใช้มันซะคุ้ม อ่านรายละเอียดด้านใน

    READ MORE
  • PHP

    บางครั้งเราก็ทำให้ชีวิตเรายากเอง

    ฟังก์ชั่น str_pad เป็นฟังก์ชั่นที่ถูกสร้างมาเพื่องานลักษณะ เติมตัวอักษรเข้าไปข้างหน้าตัวอักษร เพื่อให้ตัวอักษรครบจำนวนที่ต้องการ

    READ MORE