SubQuery pada Zend_Db_Select
Anggaplah kita akan menjalankan query seperti berikut :
select is_add from dwt_menushow where menu_id = any(select menu_id from dwt_menu where menu_link = 'mfirst') and groupuser_id = 1
Maka yang harus kita lakukan adalah mengkonversi penggunaan Zend_Db_Select pada subquery menjadi String.
$exp = $this->db->select()->from($this->prefixDbDefault."menu", array('menu_id')) ->where("menu_link = 'mfirst' ") ->__toString();
Setelah itu, baru kita panggil :
$select = $this->db->select()-> from($this->prefixDbDefault."menushow",array("is_add")) ->where("menu_id = any( $exp ) and groupuser_id = 1 "); //cek ... echo "<pre>"; print_r($this->db->fetchAll($select)); echo "</pre>"
Referensi : http://old.nabble.com/
PHP 5.3 safe mode
HP 5.3 disamping banyak mempermudah, di sisi lain jg sangat strict, sehingga yg terbiasa coding-nya agak acak-acakan (seperti saya, he.he.he.), akan sangat kesulitan ketika upgrade ke versi ini. Nah, cara mengatasinya adalah penggunaan error_reporting, cara ini saya anggap ampuh untuk menangani kode program yang strict tersebut, seperti : undefined variable, Undefined offset array, header already sent, dan lain2. Sebagai contoh, kita definisikan error_reporting(0) di line pertama :
<?php error_reporting(0); //coding php yg lainnya ...
Untuk melihat perbandingan pelevelan-nya, bisa dilihat di sini
PHP 5.3 session.save_path
PHP 5.3 memang aneh bin ajaib, walaupun banyak sekali menuai kritik karena banyak mengangkat deprecated function, tapi tetap aja banyak pula yang tertarik karena fitur2 nya yg luar biasa, lihat PHP 5.3.0 Release Announcement . Karena ketertarikan itu pula-lah, banyak yg mencoba meng-kick hal-hal yang mengganggu itu, salah satu di antara-nya adalah saya (wkwkwk…).
Kemarin ceritanya, saya mencoba php 5.3 untuk Zend Framework. Nah, pas pakai session, ternyata ada masalah, masalahnya adalah halaman menjadi blank, tanpa respon apapun. Dug…, saya langsung panik, gmn neh…, nah, setelah itu saya cari2 tahu dengan mendebug line demi line (karena sebelumnya saya tidak tahu bahwa letak kesalahannya berada pada Zend_Session_Namespace). Nah, ternyata ketemu, permasalahannya ada di baris setelah instansiasi kelas Zend_Session_Namespace. Saya langsung cari tahu di Google , nah, ketemu, cara mengakalinya dengan mendefinisikan secara eksplisit session.save_path di php.ini, misal
;;;; session.save_path = "/tmp" ;;;;
Pastikan directory tujuan bersifat writable agar bisa ditulisi.
Selamat mencoba :).
Namespace ‘jadi-jadian’ ala PHP
Namespace dapat dikatakan container yang mengelompokkan source code. Sejak lama, dalam Java telah kita kenal namespace, berupa penggunaan package di mana ketika kita mendefinisikan, misalnya, package org.postgresql , berarti class yang dipanggil berada dalam folder org/postgresql. Bagaimana dengan php ? Di php 5.3, namespace sudah mulai diperkenalkan, hanya saja, pendefinisian-nya menjadi rancu ketika kita masih tetap membutuhkan require. Lah, terus buat apa ada namespace? Tentu saja gunanya untuk pengelompokan file sehingga lebih dapi dan mudah untuk ditrace. Tentu saja kita ingin hal lain dong selain hal tersebut. Nah, untuk itu, perlu ada nya trik khusus, seperti di bawah ini.
Anggap saja kita mempunyai struktur direktori seperti di bawah ini :
Nah, yang kita perlukan adalah trik penggunaan function __autoload dalam php, yang akan mendefinisikan hal2 yg harus dilakukan ketika sebuah class diinstansiasi menjadi sebuah object.
Tentu penggunaan function __autoload ini bukan tanpa aturan. sebagai contoh, dalam file TestClass.php, saya buat sebuah class bernama org_samsonasik_TestClass , hal ini berguna untuk pemisahan folder nantinya.
source code TestClass.php :
<?php class org_samsonasik_TestClass{ public function __construct($args) { echo $args ; } }
Nah, dalam file pemanggilnya, kita buat function __autoload :
sourcecode index.php
<?php function __autoload($class) { $file = str_replace("_","/",$class.".php"); require_once $file; } $test = new org_samsonasik_TestClass("test");
ketika pemanggilan new org_samsonasik_TestClass, berarti telah merequire folder2 dalam package dengan akal-akalan function __autoload tersebut. Fungsi inilah yg digunakan seperti pada framework Zend.
leave a comment