เครื่องมือสำหรับเขียนโปรแกรม PHP

โดย SONGCHAI SAETERN
สำหรับการเริ่มศึกษาการเขียนโปรแกรมด้วย PHP นั้นจะต้องมีโปรแกรมที่ช่วยในการพัฒนาแยกดังนี้ครับ
1. โปรแกรมหลักที่ขาดไม่ได้
- Apache                =>  เว็บเซิร์ฟเวอร์
- PHP                     => ตัวแปรภาษา
- MySQL               => ฐานข้อมูล
- phpMyAdmin    => เครื่องมือจัดการฐานข้อมูล
โปรแกรมทั้ง 4 นี้ไม่จำเป็นต้องติดตั้งทีละโปรแกรมเพราะมีการรวมเป็นชุดติดตั้งมาให้แล้ว ที่แนะนำมีอย่สามค่ายคือ Appserv , Wamp และ XAMMP





ขั้นตอนการติดตั้ง Appserv
ขั้นตอนการติดตั้ง WAMP
ขั้นตอนการติดตั้ง XAMPP

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


2. เครื่องมือสำหรับเขียนโค๊ด
Notepad++    => ใช้งานง่ายไม่ใช้ทรัพยากรเครื่องมาก (ไม่ทำให้เครื่องอืดสำหรับเครื่องที่สเปกไม่สูงนัก)
Eclipse            => ใช้งานได้หลากหลาย แต่ใช้ทรัพยากรเครื่องมากนิดนึง แต่ถ้าเป็นเครื่องสเปกปัจจุบันที่สูงอยู่แล้วก็ไม่มีปัญหา ใช้ในการไล่โค๊ดได้ดี สามารถลิงค์เข้าไปดูฟังก์ชั่นที่เรียกใช้ได้ทันทีโดยการกด Ctrl + คลิก บนชื่อฟังก์ชั่น ใช้ค้นหาไฟล์ที่มีคำที่ต้องการได้อย่างรวดเร็ว




3. โปรแกรมสำหรับแสดงผล
Internet Explorer จะมาพร้อมกับวินโดวส์
Mozilla Firefox หาดาวน์โหลดได้จากในเว็บไซต์
Google Chrome หาดาวน์โหลดได้จากในเว็บไซต์




โปรแกรม 3 ตัวนี้เป็นโปรแกรมเว็บบราวเซอร์ที่นิยมใช้งานกันมากที่สุด หากต้องการพัฒนาโปรแกรมเพื่อเผยแพร่บนเว็บแบบสาธารณะคงต้องทดสอบกับทั้ง 3 โปรแกรมนี้หรืออาจจะโปรแกรมเว็บบราวเซอร์ตัวอื่นๆ รวมถึงบนมือถือด้วย

แต่ถ้าหากเป็นการพัฒนาโปรแกรมที่ใช้งานส่วนตัว หรือเฉพาะในองค์กรก็สามารถจำกัดให้ใช้เฉพาะตัวใดตัวหนึ่งเท่านั้นก็ได้ จะได้ไม่ต้องเสียเวลาปรับแต่งให้รองรับกับทุกตัว

เช่น ในองค์กรที่เน้นใช้ระบบปฏิบัติการ Linux, Ubuntu แนะนำให้ใช้ Firefox ในการแสดงผล
ในองค์กรที่เน้นใช้ระบบปฏิบัติการ Windows ก็อาจจะใช้ Internet Explorer หรือ Firefox ก็ได้





PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ราคาสุดคุ้ม  
http://fastcoding.phpcodemania.com

PHP Simple Template Engine

โดย SONGCHAI SAETERN
สำหรับคลาส Template Engine จะประกอบด้วย 3 ส่วนด้วยกัน คอ

1) ส่วนของ PHP ( Controller & Model )
2) ส่วนของ HTML ( Views )
3) คลาสจัดการ Template









HTML Views

<html>
<head>
<title>{page_title}</title>
</head>
<body>
<h3>{table_heading}</h3>

<table border="1">
<tr>
<th>รายการ</th>
<th>จำนวน</th>
<th>ราคาต่อหน่วย</th>
<th>ราคารวม</th>
</tr>
<tr parser-repeat="[data_lists]">
<td>{title}</td>
<td>{qty}</td>
<td>{unit_price}</td>
<td>{subtotal}</td>
</tr>
</table>
</body>
</html>


PHP Controller & Model  

<?php
include('libraries/PHP_Parser.php');
$template = new PHP_Parser();
// Query from Database
$data_lists = array(
array('title' => 'กระดาษ A4', 'qty' => 2, 'unit_price'=>100, 'subtotal'=>200),
array('title' => 'ดินสอ', 'qty' => 15, 'unit_price'=>2, 'subtotal'=>30),
array('title' => 'ยางลบ', 'qty' => 8, 'unit_price'=>5, 'subtotal'=>40),
array('title' => 'ปากกา', 'qty' => 10, 'unit_price'=>12, 'subtotal'=>120),
array('title' => 'ไม้บรรทัด', 'qty' => 3, 'unit_price'=>20, 'subtotal'=>60)
);
$data = array(
'page_title'   => 'ใบส่งของ',
'table_heading' => 'ใบส่งของ เลขที่ 64/00001',
'data_lists' => $data_lists
);

$template->parse('views/home.html', $data);
?>




Class Template engine PHP_Parser.php

<?php
/**
 * PHP HTML Template Engine
 * http://www.phpcodemania.com
 * @2021 for PHP Beginner
 */
class PHP_Parser{
/**
* Left delimiter character for pseudo vars
*
* @var string
*/
public $left_delimiter = '{';

/**
* Right delimiter character for pseudo vars
*
* @var string
*/
public $right_delimiter = '}';
public function parse($file_path, $data, $return = FALSE)
{
$html = $this->_load_view($file_path);
$template = $this->_parse_attribute($html, $data);
if($return == TRUE){
return $template;
}else{
echo $template;
}
}
private function _load_view($file_path)
{
$base_path = getcwd();
$file_path = $base_path.'/'. $file_path;
if(file_exists($file_path)){
ob_start();
include($file_path);
$template = ob_get_clean();
}else{
$template = 'View not found : '. $file_path;
}
return $template;
}
/**
* Parse array data list with attribute
*
* @param string
* @param array
* @param boolean
* @return array
*/  
protected function _parse_attribute($template, $data)
{
if ($template === '')
{
return FALSE;
}

$replace = array();
foreach ($data as $key => $val)
{
$replace = array_merge(
$replace,
is_array($val)
? $this->_parse_attribute_pair($key, $val, $template)
: $this->_parse_variable($key, (string) $val, $template)
);
}

unset($data);
$template = strtr($template, $replace);
return $template;
}
private function _parse_variable($key, $val, $string)
{
return array($this->left_delimiter.$key.$this->right_delimiter => (string) $val);
}
/**
* Parse data to pseudo-variables between attribute parser-repeat="[*]"
*
* @param string
* @param array
* @param string
* @return array
*/
protected function _parse_attribute_pair( $attr_value, $data, $string)
{
$replace = array();
$matches = $this->_get_html_between('parser-repeat', $attr_value, $string);

if(!empty($matches)){
foreach ($matches as $match)
{
$str = '';
foreach ($data as $row)
{
$temp = array();
foreach ($row as $key => $val)
{
if (is_array($val))
{
$pair = $this->_parse_attribute_pair($key, $val, $match[0]);
if ( ! empty($pair))
{
$temp = array_merge($temp, $pair);
}
continue;
}
$temp[$this->left_delimiter.$key.$this->right_delimiter] = $val;
}
$temp[' parser-repeat="['.$attr_value.']"'] = '';//Clear repeat attribute
$str .= strtr($match[0], $temp);
}
$replace[$match[0]] = $str;
}
}
return $replace;
}
/**
* Match html element between attribute parser-repeat="[*]"
* @param string
* @param string
* @param string
* @param string
* @return array
*/
private function _get_html_between( $attr, $value, $xml, $tag=null ) 
{
if( is_null($tag) ){
$tag = '\w+';
}else{
$tag = preg_quote($tag);
}
$attr = preg_quote($attr);
$value = preg_quote($value);

//SEARCH TAG TARGET (IT WILL BREAK WITH FIRST CLOSE TAG)
$tag_regex = "/<(".$tag.")[^>]*".$attr."\s*=\s*(['\"])\[$value\]\\2[^>]*>(.*?)(<\/\\1>)/si";
preg_match_all($tag_regex,
$xml,
$results,
PREG_SET_ORDER);
 
if(isset($results[0][1])){
$check = count($results); // IF HAS MORE THAN ONE TAG MUST USE \+w
if($check == 1){
$tag = $results[0][1]; // SET IF ONE TAG NAME
}
//GET CONTENT AGAIN WITH MULTI CLOSE TAG
$multi_regex = '{<'.$tag.'[^>]*'.$attr.'="\['.$value.'\]"[^>]*>((?:(?:(?!<'.$tag.'[^>]*>|<\/'.$tag.'>).)++|<'.$tag.'[^>]*>(?1)<\/'.$tag.'>)*)<\/'.$tag.'>}si';
preg_match_all($multi_regex,
$xml,
$matches_result,
PREG_SET_ORDER);
$results = $matches_result;
}

return $results;
}
}

/* End of file PHP_Parser.php */







PHP CI MANIA - PHP Code Generator 

โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม"
ราคาสุดคุ้ม  
http://fastcoding.phpcodemania.com