Bu Trabzon’da yapacak birşey bulamazsınız, böyle benim gibi yaklaşık 1.5 yıldır herhangi bir şekilde uğraşmadığınız dille vakit geçirmeye başlarsınız. Can sıkıntısından ötürü olsa gerek, bir anlık esintiyle PHP’yi tekrar işin içine sokmak istedim. Bir daha ister miyim? İstemem.
Zamanında yapıp yayınladığım, tekrar dönüp bakınca “Bu nasıl olmuş da 2. seçilmiş?” dediğim mysqli.so.php’yi geliştirdim, geliştirirken de __call(), __callStatic(), __get(), __set(), gibi “Sihirli Yöntemler” kullanarak biraz eğlendim. Ortaya çorba misali bir koda sahip mysqli.so-2.php çıktı.
mysqli.so-2.php
-
-
<?php
-
class mysqli{
-
-
private $pre="mysql_";
-
-
const MYSQLI_BOTH="MYSQL_BOTH";
-
const MYSQLI_NUM="MYSQL_NUM";
-
const MYSQLI_ASSOC="MYSQL_ASSOC";
-
-
-
"thread_id" =>
array(NULL,
"array_unshift",
"mysql",
NULL,
FALSE),
-
"insert_id" =>
array(NULL,
"array_unshift",
"mysql",
NULL,
FALSE),
-
"error" =>
array(NULL,
"array_unshift",
"mysql",
NULL,
FALSE),
-
"errno" =>
array(NULL,
"array_unshift",
"mysql",
NULL,
FALSE),
-
"affected_rows" =>
array(NULL,
"array_unshift",
"mysql",
NULL,
FALSE),
-
"num_rows" =>
array(NULL,
"array_unshift",
"result",
NULL,
FALSE),
-
"lengths" =>
array(NULL,
"array_unshift",
"result",
NULL,
FALSE),
-
"query" =>
array("result",
"array_push",
"mysql",
"this",
FALSE),
-
"select_db" =>
array("dbase",
"array_push",
"mysql",
"function",
FALSE),
-
"fetch_assoc" =>
array(NULL,
"array_unshift",
"result",
"function",
FALSE),
-
"fetch_array" =>
array(NULL,
"array_unshift",
"result",
"function",
FALSE),
-
"fetch_row" =>
array(NULL,
"array_unshift",
"result",
"function",
FALSE),
-
"fetch_object" =>
array(NULL,
"array_unshift",
"result",
"function",
FALSE),
-
"fetch_field" =>
array(NULL,
"array_unshift",
"mysql",
"function",
FALSE),
-
"data_seek" =>
array(NULL,
"array_unshift",
"result",
"function",
FALSE),
-
"field_seek" =>
array(NULL,
"array_unshift",
"result",
"function",
FALSE),
-
"free_result" =>
array(NULL,
"array_unshift",
"result",
"function",
FALSE),
-
"get_client_info" =>
array(NULL,
NULL,
NULL,
"function",
TRUE),
-
"ping" =>
array(NULL,
"array_unshift",
"mysql",
"function",
FALSE),
-
"change_user" =>
array(NULL,
"array_push",
"mysql",
"function",
FALSE),
-
"real_escape_string" =>
array(NULL,
"array_push",
"mysql",
"function",
FALSE),
-
"set_charset" =>
array(NULL,
"array_push",
"mysql",
"function",
FALSE),
-
"stat" =>
array(NULL,
"array_unshift",
"mysql",
"function",
FALSE),
-
"close" =>
array(NULL,
"array_unshift",
"mysql",
"function",
FALSE)
-
);
-
-
public function __construct($host,$username,$passwd,$dbname=NULL,$port=NULL,$socket=NULL){
-
$conn_addr=
(isset($host))?
((isset($port))?
$host.
":".
$port:
((isset($socket))?
$host.
":".
$socket:
$host)):
((isset($socket))?
":".
$socket:
NULL);
-
try{
-
$this->
data["mysql"] =
mysql_connect($conn_addr,
$username,
$passwd);
-
if($dbname!=""){
-
-
}
-
}
-
catch(Exception $e){
-
-
}
-
}
-
-
public function __call($func,$arg){
-
-
if(isset($this->
finfo[$func][1]) &&
isset($this->
finfo[$func][2])){
-
$this->finfo[$func][1]($arg,$this->data[$this->finfo[$func][2]]);
-
}
-
try{
-
if($this->
finfo[$func][3]==
"function" || !
isset($this->
finfo[$func][3])){
-
-
}
-
elseif(isset($this->
finfo[$func][3]) &&
isset($this->
finfo[$func][0])){
-
-
return $this;
-
}
-
}
-
catch(Exception $e){
-
-
}
-
}
-
}
-
-
public function __callStatic($func,$arg){
-
return ($this->finfo[$func][4]) ? self::__call($func,$arg) : FALSE;
-
}
-
-
public function __get($property){
-
return (!
isset($this->
finfo[$property][3])) ? self::__call
($property,
array()) :
FALSE;
-
}
-
-
public function __set($property,$value){
-
-
$this->data[$property] = $value;
-
}
-
}
-
}
-
?>
-
Şöyle bir inc_mysqli.php dosyası hazırlandıktan sonra:
-
-
<?php
-
-
require_once ‘mysqli.so-2.php’;
-
}
-
?>
-
.htaccess dosyanıza şöyle bir satır ekleyerek mysqli.so-2.php’yi rahatlıkla kullanabilirsiniz.
php_value auto_prepend_file /dosya/yolu/inc_mysqli.php
PHP defterini bir kez daha kapatırken söylemek istediğim şeyler varsa onlar da şunlardır:
1 – En başarılı kod, en okunaklı koddur. Bakınız: Satır 39. Aslında, Satır Hepsi(!)
2 – Python’a “Merhaba” derken PHP’ye “Elveda” dediysen, giderken dönüp ardına bakmamalısın.
3 – Olur da işin düşer PHP’de birşeyler yazman gerekirse, baştan kabul edeceğin şey acı çekeceğin olmalıdır.
mysqli.so-2.php’yi indirmek için tıklayın.
*Eminim Manuel Lemos beni takip ediyordur.
Tags: mysqli, php5
Posted in PHP · Aralık 6th, 2009 · Comments (0)