<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>thought snippets &#187; php</title>
	<atom:link href="http://blog.u-blue.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.u-blue.com</link>
	<description>a little bit of everything</description>
	<lastBuildDate>Tue, 08 Nov 2011 03:42:46 +0000</lastBuildDate>
	<language>TH</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>php oop #2: สร้างและห่อหมีแพนด้า</title>
		<link>http://blog.u-blue.com/2009/05/23/php-oop-2-construct-and-encapsulate/</link>
		<comments>http://blog.u-blue.com/2009/05/23/php-oop-2-construct-and-encapsulate/#comments</comments>
		<pubDate>Sat, 23 May 2009 15:31:53 +0000</pubDate>
		<dc:creator>nice</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.u-blue.com/?p=160</guid>
		<description><![CDATA[จากโพสที่แล้ว php oop #1: panda class ว่าด้วยเรื่องการเขียน php oop แบบง่ายๆ แต่ดูไม่มีประโยชน์เท่าไหร่นัก เพราะถ้าดูดีๆมันก็ไม่ต่างจากเขียนฟังก์ชั่นเท่าไหร่ เลยมาว่าต่อถึงคุณสมบัติจริงๆของ object oriented บ้าง เริ่มต้นจากอย่างแรกก่อน คือคอนเซปต์การ encapsulation หรือขอเรียกง่ายๆว่า การห่อ ซึ่งก็เป็นเหมือนการซ่อนข้อมูลภายในคลาสไว้ไม่ให้สามารถเข้าถึงได้โดยตรงจากส่วนอื่นๆของโปรแกรม ลองดูโค้ทกันเลยน่าจะง่ายกว่านั่งอธิบายให้ยืดยาว class Panda{ private $name; function eat(){ echo "eating bamboo leaf"; } } ก็เล่นกันง่ายๆเลย คือเปลี่ยนตัวแปร name ให้เป็น private ซะ คราวนี้การเรียกถึงตัวแปรแบบตรงๆอย่างที่เห็นในตัวอย่างที่แล้วก็จะไม่สามารถทำได้อีกต่อไป แต่เมื่อต้องการเรียกใช้เราก็อาจจะเพิ่ม method เข้าไป เช่น function setName($pname){ $this-&#62;name=$pname; } function getName(){ return $this-&#62;name; } ]]></description>
			<content:encoded><![CDATA[<p>จากโพสที่แล้ว <a href="http://blog.u-blue.com/2009/03/08/php-oop-panda-class/">php oop #1: panda class</a> ว่าด้วยเรื่องการเขียน php oop แบบง่ายๆ แต่ดูไม่มีประโยชน์เท่าไหร่นัก เพราะถ้าดูดีๆมันก็ไม่ต่างจากเขียนฟังก์ชั่นเท่าไหร่ เลยมาว่าต่อถึงคุณสมบัติจริงๆของ object oriented บ้าง</p>
<p>เริ่มต้นจากอย่างแรกก่อน คือคอนเซปต์การ encapsulation หรือขอเรียกง่ายๆว่า การห่อ ซึ่งก็เป็นเหมือนการซ่อนข้อมูลภายในคลาสไว้ไม่ให้สามารถเข้าถึงได้โดยตรงจากส่วนอื่นๆของโปรแกรม ลองดูโค้ทกันเลยน่าจะง่ายกว่านั่งอธิบายให้ยืดยาว</p>
<pre class="brush:php">class Panda{
   private $name;
   function eat(){
       echo "eating bamboo leaf";
   }
}</pre>
<p>ก็เล่นกันง่ายๆเลย คือเปลี่ยนตัวแปร name ให้เป็น private ซะ คราวนี้การเรียกถึงตัวแปรแบบตรงๆอย่างที่เห็นในตัวอย่างที่แล้วก็จะไม่สามารถทำได้อีกต่อไป แต่เมื่อต้องการเรียกใช้เราก็อาจจะเพิ่ม method เข้าไป เช่น</p>
<pre class="brush:php">function setName($pname){
   $this-&gt;name=$pname;
}
function getName(){
   return $this-&gt;name;
}</pre>
<p>โดย method setName จะรับค่า name มาใน parameter ด้วย ส่วน getName จะไม่ทำอะไรนอกจาก return ค่าในตัวแปร name แล้วเวลาเรียกใช้ก็จะใช้วิธีเรียกหา method เช่น</p>
<pre class="brush:php">$p1 = new Panda();
$p1-&gt;setName("Lin Hui");
echo $p1-&gt;getName();</pre>
<p>จะเห็นว่า ถ้าเราไม่เขียน method get,set ขึ้นมาซะอย่าง ใครๆก็ไม่สามารถเข้าถึงข้อมูลภายในคลาสของเราได้ ซึ่งในแง่ของความปลอดภัยแล้ว การทำ encapsulation ถือว่ามีประโยชน์มากเลยทีเดียว<br />
<span id="more-160"></span><br />
อีกเรื่องหนึ่งต้องรู้ในการเขียนโปรแกรมเชิงวัตถุใน php คือ การสร้าง constructor ของคลาส หรือมันก็คือการสร้าง method ที่จะทำงานตอนเราสร้างวัตถุจากคลาสนั้นๆเท่านั้น ซึ่งใน php นี้จะมีการใช้คำสั่งที่ต่างจากจาวาซักหน่อย คือ</p>
<pre class="brush:php">class Panda{
   private $name;
   function __construct($pname){
      $this-&gt;name=$pname;
   }
}</pre>
<p>ตามโค้ทก็คือ เมื่อมีการสร้างวัตถุจากคลาสนี้ method construct จะถูกเรียกใช้(และในวัตถุนี้จะไม่สามารถเรียกใช้ method construct ได้อีก) และรับค่า ชื่อหมี($pname) มาใส่ไว้ในตัวแปร  name ดังนั้นตอนสร้างวัตถุก็ต้องมีการใส่ชื่อไปด้วย ดังนี้</p>
<pre class="brush:php">$p1 = new Panda("Lin Hui");</pre>
<p>คราวนี้เราเอาทั้งการ encapsulation และ constructor มารวมกัน โดยจะเขียนให้สามารถตั้งชื่อได้ครั้งเดียว และไม่สามารถเปลี่ยนได้ แต่ยังเอาไปใช้งานได้อยู่</p>
<pre class="brush:php">class Panda{
   private $name;
   function __construct($pname){
      $this-&gt;name=$pname;
   }
   function getName(){
      return $this-&gt;name;
   }
}

$p1 = new Panda("Lin Hui");
echo $p1-&gt;getName();</pre>
<p>จะเห็นว่าตอนสร้าง object เราจะต้องใส่ค่า(ชื่อ) ไปเลย และเมื่อตั้งชื่อไปตอนสร้างแล้วจะเปลี่ยนค่าไม่ได้ เพราะเราเอา method setName ออกไปแล้ว ซึ่งความสามารถในการจะทำแบบนี้ได้เป็นสิ่งที่มีประโยชน์มากในการออกแบบโปรแกรมแบบต่างๆได้ ก็แล้วแต่จะพลิกแพลงกันไป </p>
<div class="ref-wrapper" id="ref-related"><h5 class="box primary">Related Entries</h5><ul><li class="boxlist"><a href="http://blog.u-blue.com/2009/03/08/php-oop-panda-class/" class="box accent" >php oop #1: panda class</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.u-blue.com/2009/05/23/php-oop-2-construct-and-encapsulate/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>php oop #1: panda class</title>
		<link>http://blog.u-blue.com/2009/03/08/php-oop-panda-class/</link>
		<comments>http://blog.u-blue.com/2009/03/08/php-oop-panda-class/#comments</comments>
		<pubDate>Sun, 08 Mar 2009 13:31:28 +0000</pubDate>
		<dc:creator>nice</dc:creator>
				<category><![CDATA[webdev]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://blog.u-blue.com/?p=128</guid>
		<description><![CDATA[ว่ากันเรื่องการเขียนโปรแกรม php แบบ oop หรือ object oriented programming นั่นเอง ก่อนจะไปว่ากันเรื่อง php ก็ต้องอธิบาย oop กันก่อน สำหรับคนที่คุ้นๆกันอยู่แล้วก็ข้ามไปได้เลย เอาง่ายๆแบบไม่ยืดยาว oop คือการเขียนโปรแกรมที่ให้ความสำคัญกับ &#8220;วัตถุ&#8221; คุณสมบัติ และความสัมพันธ์ของมัน โดยมีศัพท์ที่ต้องรู้จัก ดังนี้ Class(ชนิดของวัตถุ) เป็นเหมือนเทมเพลท เพื่อบอกว่าวัตถุชนิดนี้จะมีคุณสมบัติใดบ้าง โดยคุณสมบัติประกอบด้วย 2 อย่าง คือ สถานะ(state) และ พฤติกรรม(behavior) คลาส หมีแพนด้า มีสถานะคือ ชื่อหมี และมีพฤติกรรมคือ กินไผ่ Object(วัตถุ) สร้างขึ้นมาจากคลาส โดยเมื่อเป็นวัตถุแล้ว state จะกลายเป็น instance variable(ตัวแปรนั่นแหละ) และ behavior จะถูกเรียกว่า method วัตถุ หมีแพนด้า ที่มีชื่อ หลินฮุ่ย สามารถ ]]></description>
			<content:encoded><![CDATA[<p>ว่ากันเรื่องการเขียนโปรแกรม php แบบ oop หรือ object oriented programming นั่นเอง</p>
<p>ก่อนจะไปว่ากันเรื่อง php ก็ต้องอธิบาย oop กันก่อน สำหรับคนที่คุ้นๆกันอยู่แล้วก็ข้ามไปได้เลย</p>
<p>เอาง่ายๆแบบไม่ยืดยาว oop คือการเขียนโปรแกรมที่ให้ความสำคัญกับ &#8220;วัตถุ&#8221; คุณสมบัติ และความสัมพันธ์ของมัน โดยมีศัพท์ที่ต้องรู้จัก ดังนี้</p>
<ol>
<li><strong>Class</strong>(ชนิดของวัตถุ) เป็นเหมือนเทมเพลท เพื่อบอกว่าวัตถุชนิดนี้จะมีคุณสมบัติใดบ้าง โดยคุณสมบัติประกอบด้วย 2 อย่าง คือ สถานะ(state) และ พฤติกรรม(behavior)<br />
<blockquote>
<p style="text-align: center;">คลาส <strong>หมีแพนด้า</strong> มีสถานะคือ <em>ชื่อหมี</em> และมีพฤติกรรมคือ <em>กินไผ่</em></p>
</blockquote>
</li>
<li><strong>Object</strong>(วัตถุ) สร้างขึ้นมาจากคลาส โดยเมื่อเป็นวัตถุแล้ว state จะกลายเป็น instance variable(ตัวแปรนั่นแหละ) และ behavior จะถูกเรียกว่า method<br />
<blockquote>
<p style="text-align: center;">วัตถุ <strong>หมีแพนด้า</strong> ที่มีชื่อ <strong>หลินฮุ่ย</strong> สามารถ <strong>กินไผ่</strong> ได้</p>
</blockquote>
</li>
</ol>
<p>นั่นคือ ถ้าพูดว่า &#8220;หมีแพนด้า&#8221; ขึ้นมาลอยๆโดยไม่ระบุวัตถุว่าเป็นแพนด้าตัวไหน มันก็จะไม่มีชื่อ และกินไผ่ไม่ได้ งงไหม? ถ้างงก็ลงไปดูโค้ท php กันเลย มันง่ายกว่า จริงๆ<br />
<span id="more-128"></span><br />
โค้ทตัวอย่างการใช้ oo ใน php แบบง่ายๆ โดยใช้เราจะสร้างคลาสแพนด้ากันก่อน</p>
<pre class="brush:php">class Panda{
   var $name;
   function eat(){
       echo "eating bamboo leaf";
   }
}</pre>
<p>เมื่อได้คลาสแล้ว มันก็จะไม่มีประโยชน์ใดๆ ถ้าเราไม่สร้างวัตถุขึ้นมาใช้เจ้าคลาสนี้</p>
<pre class="brush:php">$p1 = new Panda();
$p1-&gt;name="Lin Hui";
$p1-&gt;eat();</pre>
<p>อธิบายโค้ทคือ<br />
บรรทัดที่ 1 สร้างวัตถุจากคลาส แพนด้า ใส่ในตัวแปรชื่อ p1<br />
บรรทัดที่ 2 ใส่ค่า name ว่า &#8220;Lin Hui&#8221; ให้วัตถุชนิดแพนด้า p1 นี้<br />
บรรทัดที่ 3 สั่งให้หลินฮุ่ยกินไผ่ เมื่อจบบรรทัดนี้จะมีข้อความ &#8220;eating bamboo leaf&#8221; พิมพ์ออกมา</p>
<p>ถ้ากลัวหลินฮุ่ยเหงา เราก็จะสร้างแพนด้าขึ้นมาอีกตัว ชื่อ ช่วงๆ โดยเราจะสร้างแค่วัตถุเพิ่ม โดยไม่ยุ่งกับคลาสเลย</p>
<pre class="brush:php">$p2 = new Panda();
$p2-&gt;name="Chung Chung";</pre>
<p>ทีนี้เอาโค้ทมารวมกัน แล้วสั่งให้พิมพ์ชื่อหมีออกมาทั้งสองตัว</p>
<pre class="brush:php">class Panda{
   var $name;
   function eat(){
       echo "eating bamboo leaf";
   }
}

$p1 = new Panda();
$p1-&gt;name="Lin Hui";

$p2 = new Panda();
$p2-&gt;name="Chung Chung";

echo $p1-&gt;name;
echo "
";
echo $p2-&gt;name;</pre>
<p>ก็คงจะเดากันได้ ว่าผลลัพท์ที่จะได้ก็คือจะมีข้อความ<br />
Lin Hui<br />
Chung Chung<br />
พิมพ์ออกมา ซึ่งแสดงว่าตัวแปรในทั้งสอง object นั้นถูกเก็บแยกเป็นอิสระจากกัน</p>
<p>เรื่องแพนด้าและวัตถุนี้ก็เอาไว้คร่าวๆแค่นี้ก่อนให้มองเห็นภาพวิธีการเขียน php แบบ object oriented โดยไม่ได้หวังว่าจะเป็นประโยชน์แก่ใครเท่าไหร่นัก เขียนเพื่อความมันส์ส่วนตัวล้วนๆ แต่ถ้ามีใครอ่านแล้วได้ประโยชน์ก็(แอบ)ดีใจด้วย!</p>
<div class="ref-wrapper" id="ref-related"><h5 class="box primary">Related Entries</h5><ul><li class="boxlist"><a href="http://blog.u-blue.com/2009/05/23/php-oop-2-construct-and-encapsulate/" class="box accent" >php oop #2: สร้างและห่อหมีแพนด้า</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://blog.u-blue.com/2009/03/08/php-oop-panda-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

