" /> ๐๐๘ | หัดเขียน PHP แบบ OO (object-oriented) – aHuii.com

aHuii.com

บล็อกของอาฮุย :)

๐๐๘ | หัดเขียน PHP แบบ OO (object-oriented)

October 15th, 2008

อยากลองหัดเขียนโปรแกรมแบบ OO มานานแล้ว แต่ยังไม่มีโอกาสเหมาะๆ ซักที ตอนนี้ว่าจะทำตัวฝากรูปในเว็บ จริงๆ ก็ไปหา script แจกฟรีได้เยอะแยะ แล้วก็เอามาโมฯ ใหม่ แต่ถ้าทำแบบนั้นก็เหมือนไม่ได้ฝึกฝีมือเท่าไหร่ เพราะมันไม่ได้ใช้เวลานานขนาดทำเว็บบอร์ดไว้ใช้เอง หรือทำ blog ไว้ใช้เอง ก็เลยเอาโปรเจ็คนี้มาเป็นตัวฝึกฝีมือซะเลย

คิดไว้คร่าวๆ ก็เอาเป็น interface แบบ friendly หน่อย ใช้งานง่ายๆ function ยังไม่ต้องเยอะมาก เดี๋ยวเปิดให้ใช้ซักพักเดี๋ยวก็มี request กันมาเองว่าอยากได้อะไรเพิ่มบ้าง ถ้าไม่มีก็ดีไป ฮ่าๆๆ

ดังนั้นในเนื้องานก็เลยไม่มีอะไรมากนัก หลักๆ คือ อัพรูปขึ้นไปได้ เวลาuser login เข้าระบบ ก็เข้าไปหน้า control panel แสดงรูปที่ตัวเองอัพโหลดขึ้นมาและสามารถลบได้ หรือจะอัพโหลดเพิ่มก็ได้ ส่วนการจัดเก็บก็เก็บแบบแยกแต่ละวัน ทั้งหมดแค่นี้เอง..

เริ่มต้นหัดเขียน class สร้าง object เรียก method (function) ฉลุยไม่มีปัญหา มองไปมองมา เอ..ใน function เราทำไมประกาศตัวแปรซ้ำๆ กันเยอะจัง มันเอามาประกาศข้างนอกก็ได้นี่หว่า และแล้ว..ก็เจอตอจนได้

ปัญหาแบบปลาตายน้ำตื้นอีกแล้วครับท่าน..(ผมตายน้ำตื้นประจำ เพราะไม่เคยไปถึงน้ำลึก..ฮ่าๆๆ)

หลังจากเอาตัวแปรออกมาประกาศข้างนอก ไม่ว่าจะแบบ public, private, protected พอประกาศเสร็จแล้วดันไปเรียกใช้ใน function ไม่ได้ซะงั้น เอ้า..อะไรกันนี่

นั่ง search ใน manual ของ PHP ตั้งนาน ก็เขียนประกาศตัวแปรเหมือนกันหมดแต่ทำไมไม่เห็นได้แบบเค้ามั่งเลยว้า
code ที่ใช้งานไม่ได้มีประมาณนี้ (อันนี้เขียนเองใหม่นะ ไม่ได้เอามาจากที่ผิด)

class Test {

public $string = “Hello”;

function abc() {

echo $string;
}
}

หลังจากแบบด้านบนไม่ได้ ผมก็ลองอีกแบบนึง ซึ่งก็ไม่ได้เหมือนกัน

class Test {

public $string = “Hello”;

function abc() {

echo $this->$string;
}
}

ถ้าใครโปรๆ มาเห็นคงหัวเราะก๊าก..ว่าไอ้นี่โง่จริง ( /w\;;)

ผิดตรงบรรทัด echo $string นั่นแหละครับ เพราะการ access ตัวแปรใน class ต้องเขียนแบบนี้ครับ $this->string แบบที่สองเกือบถูกแต่ก็ยังผิดอยู่ดี เพราะต้องไม่มี $ หน้า string

จะ assign ค่าก็เขียน

$this->string = “text”;

จะให้มัน echo ออกมาก็เขียน

echo $this->string;

แค่นี้เอง งมอยู่ตั้งนานง่ะ อายจัง~ /w\;;

aHuii.com

บล็อกของอาฮุย :)