P. 1
Belajar Konsep OOP Dengan Bahasa Pemrograman PHP

Belajar Konsep OOP Dengan Bahasa Pemrograman PHP

|Views: 766|Likes:
Published by Ismail Puguh

More info:

Published by: Ismail Puguh on Apr 21, 2012
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

09/07/2013

pdf

text

original

Belajar konsep OOP dengan bahasa pemrograman PHP – Lesson I

Diposting oleh Ivo Idham Perdameian pada 28 September 2011Tinggalkan komentar (1)Menuju ke komentar

Banyak sekali artikel dan tutorial yang membahas pembelajaran konsep OOP, namun hal itu masih terasa tidak memenuhi atau boleh dikatakan artikel dan tutorialnya tidak memuaskan. Nah dalam tutorial saya kali ini saya ingin membahas hal tersebut secara sederhana yang mudah dipahami untuk pemula dalam belajar konsep OOP dengan bahasa pemrograman PHP dan tutorial ini merupakan tutorial yang berkelanjutan dan saya akan bahas secara tuntas, jadi tunggu aja kelanjutan tutorial berikutnya karena tulisan ini hanya sekedar pengantar dari pembahasan yang panjang , setelah tutorial ini kita akan membuat source

code sebagai bentuk implementasi dari pembahasan dari artikel/tutorial yang dibahas, so stay upto date via rss juga boleh. Pengertian singkat OOP
OOP (Object Oriented Programming) adalah sebuah konsep pemograman yang berbasis objek, OOPmerupakan terobosan baru dalam pemrograman setelah pemrograman prosedural, pemrograman modular dan pemrograman abstraksi data.

Kenapa harus OOP?
OOP memberikan kemudahan bagi programmer dalam pembuatan sebuah program, memberikan fleksibilitas yang lebih,
kemudahan penggunaan program, dan dipakai luas dalam teknik piranti lunak skala besar. Selain itu dengan pemograman OOP kode yang dibuat akan lebih mudah dikembangkan dan dirawat dalam arti seorang programer bisa menambah sebuah objek baru tanpa harus menggangu dan merubah modul yang lain. Berikut ini keuntungan dari penggunaan OOP dalam pemograman : 1. 2. 3.

Reusability (kemampuan untuk digunakan kembali). Kode yang dibuat dapat digunakan kembali di aplikasi atau program
lainnya.

Extensibility (Kemampuan untuk dapat dikembangkan). Kita dapat membuat method yang baru atau mengubah yang
sudah ada sesuai dengan yang kita inginkan tanpa harus membuat kode dari awal.

Maintainability (Kemampuan untuk mudah dikelola), kode yang sudah dibuat lebih mudah untuk di maintain/manage.
Apabila aplikasi yang dibuat adalah aplikasi dengan skala besar dan apabila terjadi error atau kesalahan maka dengan OOP hal tersebut mudah ditangani karena pemograman yang menggunakan OOP sudah modularitas(memecahkan program yang besar menjadi bagian-bagian kecil) sehingga perbaikan cukup pada modulmodul tertentu saja tanpa harus mengubah modul yang lainnya.

Empat konsep utama OOP
Dalam pemograman OOP, ada empat hal yang harus diperhatikan karena hal tersebut merupakan konsep vital dari OOP tersebut. Berikut ini konsep tiga konsep utama tersebut: 1. 2. 3. 4.

Encapsulation/pembungkusan, merupakan penyembunyian informasi melalui private danprotected. Inheritance/pewarisan, adalah kemampuan untuk membuat class turunan yang mewarisi propertydan method dari kelas
induk.

Abtraction/abtraksi, adalah sebuah konsep yang merupakan representasi abstrak dari konsep dalam pemograman,
misalnya objek mobil merupakan representasi abstrak dari mobil dalam dunia nyata.

Polymorphism/banyak bentuk, seorang programer bisa memakai method dengan nama yang sama pada class-class yang
berbeda.

Untuk sementara cukup sampai di sini dulu, lain waktu saya akan menulis kelanjutannya.

\

php index. location / { try_files $uri $uri/ /index. gimana cara pisahin beberapa aplikasi.3 3.0. index index. root /srv/cas/public. yang ane pakai adalah: 1.html /index.htm. mysql 5.html index.php. server_name localhost. libcurl Ini adalah contoh config file nginx yang digunakan pada CAS server: Code: http { server { listen 80. } } .php. PHP 5. include fastcgi_params. } location ~ \. webserver: Nginx. Karena itu sekalian ane bahas aja disini. fastcgi_index index.[share] Membuat central authentication server di PHP Kemarin ada yang PM ane.1:9000. tanya gimana cara bedain aplikasi internal sama external. dan sekaligus melakukan single logon untuk mereka.php$ { fastcgi_pass 127. Untuk keperluan ini.0. libssl untuk openssl 4. tetapi apache juga bisa 2.

Tabel users Code: uid: varchar(50) name: varchar(200) pwd: char(200) Sesuaikan panjang pwd dengan password yang akan agan encrypt. Tabel tickets Code: id: char(15) -> untuk menampung id tiket uid: varchar(50) -> asosiasi tiket dan user Mungkin bisa ditambahkan expired date? Jadi ticket yang kelamaan ga diakses akan dihapus dengan sendirinya. Kemudian kita bisa membuat firewall untuk memblokir port 8000 agar tidak bisa diakses dari internet. Sekarang. Informasi yang ane contohkan juga hanya nama user. include fastcgi_params.server { listen 8000.sql untuk membersihkan tiket tiket ini. Dan apabila diakses melalui http://ipaddress:8000/ maka dia akan serve file dari /srv/cas/internal. private $user. database.1:9000.. Untuk contoh. Kemudian kita akan membuat modul untuk melakukan CAS authentication.. jadi hanya aplikasi yang bisa menggunakan port 8000 untuk internal.0. .0. dibutuhkan minimal 3 tabel untuk ini. private $pass. dan database untuk authentication.php.. location / { try_files $uri $uri/ /index. ane pake database yang cukup simple saja. } location ~ \.html. Modul encryption bisa agan buat sendiri dengan implement ICasEncryption interface. Jelas. dia akan listen pada port 80 dan 8000. } } } Jadi pada nginx. kita membutuhkan sebuah server. Bisa gunakan cron dengan mysql cleanup. PHP Code: class ConnectionConfig { private $host. Dengan config diatas.php$ { fastcgi_pass 127. apabila nginx diakses melalui http://ipaddress/ maka dia akan serve file dari /srv/cas/public. Pertama adalah config modul yang dibutuhkan. fastcgi_index index. root /srv/cas/internal. Tabel application Code: id: varchar(50) key: text key adalah untuk menampung public key dari aplikasi agan. private $schema.

$schema) { $cn = new ConnectionConfig($host. $pass.} } Ini untuk config di CAS server nantinya.} public function setPass($pass) {$this->pass = $pass. } public function getHost() {return $this->host. $pass. $user. $schema) { $this->host = $host.} public function setSchema($schema) {$this->schema = $schema.} public function setConnection($host.} public function setUser($user) {$this->user = $user. ''. } public function getApps() {return $this->apps.} public function setUser($user) {$this->user = $user. Sekarang. 'cas'). $this->tickets = 'tickets'. private $tickets.} public function setHost($host) {$this->host = $host. $this->connection = $cn. private $apps.} public function getUser() {return $this->user. $this->user = $user. 'root'. $this>connection = new ConnectionConfig('localhost'. Cukup mudah dimengerti kan? masih simple sekali class-nya. $this->user = 'users'. PHP Code: interface ICasEncryption { public function getSalt($text).} public function getTickets() {return $this->tickets. function __construct() { $this->apps = 'applications'. } public function getConnection() {return $this->connection.} public function getSchema() {return $this->schema. private $user. kita perlu sebuah file encryption yang harus dibuat untuk melakukan authentication.} } PHP Code: class ConfigObject { private $connection. $user. $pass. $this->pass = $pass.} public function getPass() {return $this->pass. $this->schema = $schema.} public function setTickets($tickets) {$this->tickets = $tickets. $user. .} public function getUser() {return $this->user.} public function setApps($apps) {$this->apps = $apps. $schema).function __construct($host.

$this->connection = new mysqli($connect>getHost(). $salt) { return md5($text). $connect->getUser()..Create an KasAD / Buat Iklan KasAD 04-07-2011. kita akan masuk ke main module. yaitu CasServer PHP Code: class CasServer { private $config. tetapi harus implement ICasEncryption. . $connect->getPass(). public function createSalt(). $connect>getSchema()). return true. ane buat encryption biasa. 01:04 AM #2 magico kaskus addict UserID: 50559 8 Join Date: Jul 2008 Posts: 3. karena itu yang akan digunakan oleh CasServer untuk compare password. } public function encrypt($text.979 Sekarang. Untuk contoh.public function encrypt($text. $this->connect(). private $connection. QUOTE KaskusAd . $config = $this->config. } class CasEncryption implements ICasEncryption { public function getSalt($text) { return "". Silahkan merubahnya supaya lebih sakti Last edited by magico. public function getConfig() {return $this->config. $salt). } private function createTicket($uid) { $ticket = 'T'.} public function setConfig($config) { if ($config instanceof ConfigObject) $this->config = $config. } private function connect() { if ($this->connection) {return true. } public function createSalt() { return "". dengan md5. $this->connection = NULL. tanpa salt.} $connect = $this->config->getConnection(). } } Terserah agan mau encrypt seperti apa. } public function __construct() { $this->config = new ConfigObject().uniqid(). 04-07-2011 at 01:59 AM.

$encryption) { $this->connect(). if ($row[0] == 0) { //Tidak ada duplikat //Encrypt password $salt = $encryption->createSalt(). pwd) VALUES ('$uid'. '$enc')"). $salt). return $ticket. name."). } public function createuser($uid. $encryption) { $this->connect(). $conn->real_query("INSERT INTO {$config>getTickets()} (id. $pass. $conn = $this->connection. $pass. $name. } else { return false. } //Periksa userid $result = $conn->query("SELECT count(uid) FROM {$config>getUser()} WHERE uid = '$uid'"). $conn = $this->connection. } } public function authenticate($uid. '$name'. $config = $this->config. $pass = $conn->real_escape_string($pass). if (!$encryption instanceof ICasEncryption) { trigger_error("ERROR: Need ICasEncryption object"). $enc = $encryption->encrypt($pass. $pass = $conn->real_escape_string($pass). if (!$encryption instanceof ICasEncryption) { trigger_error("ERROR: Need ICasEncryption object"). '$uid')"). $config = $this->config. } //Ambil encrypted password $result= $conn->query("SELECT pwd FROM {$config>getUser()} WHERE uid = '$uid'. return true.$conn = $this->connection. //sanitize $uid = $conn->real_escape_string($uid). $row = $result->fetch_array(). //Sanitize $uid = $conn->real_escape_string($uid). lakukan one way encryption . $row = $result->fetch_array(). uid) VALUES ('$ticket'. //insert $conn->real_query("INSERT INTO {$config>getUser()} (uid. if ($row) { //User ditemukan.

$pass2 = $encryption->encrypt($pass. $user['uid']=''. $salt). //Sanitize $app = $conn->real_escape_string($app). } } public function register($app. if ($text == $pass2) { //Hash sama. //Sanitize $app=$conn->real_escape_string($app). $config = $this->config. } } else { return false. } else { return false. //Check apakah sudah terdaftar $result = $conn->query("SELECT count(id) FROM {$config>getApps()} WHERE id = '$app'").$text = $row[0]. //Ambil data user sesuai tiket $query = "SELECT `key` FROM {$config>getApps()} WHERE id = '$app'. $key=$conn->real_escape_string($key). SELECT u. $salt = $encryption->getSalt($text). return true. $ticket) { $this->connect(). $row = $result->fetch_array().uid = t. $config = $this->config.name FROM {$config->getTickets()} t INNER JOIN {$config>getUser()} u ON u. '$key')"). $uid = ''. $key = ''. $conn = $this->connection.uid. } public function redeem($app. $key) { $this->connect(). $user['name']=''. return $ticket. $conn = $this->connection.uid . `key`) VALUES ('$app'. u. //Register aplikasi baru $conn->real_query("INSERT INTO {$config>getApps()} (id. buat tiket $ticket = $this->createTicket($uid). $ticket = $conn->real_escape_string($ticket). if ($row[0] > 0) return false.

$crypted.WHERE id = '$ticket'". $key). Keduanya menerima $encrytion parameter sebagai object yang akan melakukan encrypt terhadap password tersebut. $row = $data->fetch_array(). 'schemaane' ). $salt) { . } } . } public function createsalt() { . } //Encrypt sesuai public key $data = json_encode($user). $crypted = ''. Keduanya meminta ICasEncryption interface. return base64_encode($crypted). 'rahasiadong'. if ($conn->multi_query($query)) { $data = $conn->store_result().. if ($conn->next_result()) { $data = $conn->store_result(). $cas->setConfig($config). Misalnya: PHP Code: $config = new ConfigObject(). akan memastikan agan bisa mengatur config dari CasServer ini sesuai object ConfigObject diatas. dan setTickets() untuk tabel penampung tiket.. $config->setApps('aplikasineh'). } else { //Tiket tidak ditemukan return false. setUser() untuk tabel user... $config>setConnection('localhost'. agan bisa mengirimkannya melalui setConfig().. $cas = new CasServer().. Setelah agan mengatur ConfigObject. } } Pertama.. Kemudian default connection bisa diatus melalui setConnection pada ConfigObject. } public function encrypt($text. $row = $data->fetch_array(). openssl_public_encrypt($data. $user['uid']= $row[0].. Jadi misalnya agan membuat Encryption berikut: PHP Code: class IniEncryption implements ICasEncryption { public function getSalt($text) { . $key = $row[0]. setApps() akan mengatur nama tabel untuk aplikasi. } } else { echo $conn->error. Kemudian ada method createuser dan authenticate yang akan mengatur user. 'useragan'.. $user['name']= $row[1]. method setConfig.

openssl_pkey_export($key. Jadi biarpun agan tahu bahwa aplikasi menggunakan nama 'testapp'. } private function loadkey() { $key = file_get_contents($this->keypath). curl_setopt($ch. Jadi pastikan kalau membuat encryption dengan salt. dan application id. $param = 'id='. $app = $this->appname. $public_key = $public_key['key'].urlencode($public_key). private $appname.'&key='. $privatekey). return $key. CURLOPT_POSTFIELDS. curl_close($ch). . Sedangkan encrypt adalah untuk melakukan encryption dan hashing. 'Ane nehh'. } public function __construct($appname) { $this->appname = $appname.$app. return $result == "OK". Maka password 123456 akan diencrypt sesuai code agan pada class IniEncryption getSalt adalah untuk extract Salt dari text yang sudah disimpan. $param). tetapi agan tidak akan bisa membaca datanya apabila agan tidak memiliki private key untuk membuka kuncinya. 2). key ini nantinya akan digunakan untuk encrypt data yang dikirimkan ke luar. Method register adalah untuk registrasi aplikasi. curl_setopt($ch. maka modul authenticate akan membuat tiket dengan memanggil createticket(). true). CURLOPT_RETURNTRANSFER. $result = curl_exec($ch). dan createSalt adalah Salt generator. Kita sampai pada bagian terakhir. dan menyimpannya ke database. dengan nomor tiket '12345'. yaitu CasClient PHP Code: class CasClient { private $keypath = '/srv/test/private.key'. pastikan agan bisa mengambil salt-nya. //Register ke url yang diberikan $ch = curl_init($url).Maka agan akan bisa pass sebagai cara enkripsi password seperti ini: PHP Code: $cas>createuser('magic'. Aplikasi yang register harus mengirimkan public key-nya. '123456'. new IniEncryption()). private function savekey($key) { file_put_contents($this->keypath. Setelah pemeriksaan selesai. $key). $public_key = openssl_pkey_get_details($key). } public function register($url) { //Generate SSL encryption key $key=openssl_pkey_new(). curl_setopt($ch. //Save key ke config file $this->savekey($privatekey). CURLOPT_POST.

04-07-2011 at 01:32 AM. dan mengirimkan public key-nya ke server supaya server bisa melakukan encrypt. Ada cara lain.php PHP Code: require_once 'init. supaya user tidak bisa mengakses port ini.'&ticket='.urlencode($ticket). $app = $this->appname. Pada waktu register. //Request data ke url yang diberikan $ch = curl_init($url). curl_setopt($ch. Karena itu ane membuatnya pada port internal. $param). CURLOPT_POST. $result= base64_decode($result). Agan bisa rubah folder tersebut. adalah siapapun bisa melakukan registrasi. dan menyimpan private key-nya pada folder tertentu. curl_setopt($ch. openssl_private_decrypt($result. 01:40 AM #3 magico kaskus addict UserID: 5055 98 Join Date: Jul 2008 Posts: 3. //decrypt data $decrypted="". CURLOPT_RETURNTRANSFER.. apabila bisa mengakses ke page dengan registrasi ini.} public function redeem($url.inc'. return $decrypted.979 Kelemahan dari modul yang ane buat ini. $param = 'id='. true). Tanpa private key ini. $key). data yang dikirim oleh CasServer tidak akan bisa dibaca oleh method redeem(). yang akan disimpan oleh server CasServer dan digunakan untuk melakukan enkripsi. client akan membuat sebuah RSA key. } } Modul ini digunakan pada aplikasi client yang akan melakukan otentikasi ke CAS server. $decrypted. $result = curl_exec($ch). 2). tetapi pastikan agan bisa menulis ke sana. $appname disini adalah identifikasi aplikasi.$app. QUOTE 04-07-2011. $ticket) { $key = $this->loadkey(). if (!isset($_POST['id'])) { die(). yaitu membatasi data aplikasi dan melakukan verifikasi sebelum data boleh digunakan oleh method redeem() pada CasServer Berikutnya. . curl_close($ch). } $app = $_POST['id']. life example dari modul modul ini Pada folder /srv/cas/internal registrasi. $cas=new CasServer(). curl_setopt($ch. $key = $_POST['key']. Last edited by magico. CURLOPT_POSTFIELDS.

} else { $error_string = "Maaf.$result = $cas->register($app. if ($data) echo $data. if ($result) echo "OK".inc'. Pada folder /srv/cas/public login. $ticket = $_REQUEST['ticket']. 'root'. $config = new ConfigObject(). } else { die(). $ticket = $cas>authenticate($uid.inc'. ?> . $cas = new CasServer(). if (!isset($_REQUEST['id'])) { die(). die(). $key). tidak dapat menemukan data anda< br/>". } } ?> <h2>Contoh login gateway untuk CAS Server</h2> <br/> Anda masuk kesini karena akan masuk dari:<br/> <? echo $ref ?><br/> <br/> Silahkan login:<br/> <? echo $error_string. redeem. } if (isset($_POST['user']) && isset($_POST['pass'])) { $cas = new CasServer(). new CasEncryption()). if ($ticket) { header("location: $ref?ticket=$ticket"). $config->setConnection('localhost'.php PHP Code: <?php require_once 'init. } $app = $_REQUEST['id']. $error_string = ''. $ticket). $pass. $uid = $_POST['user']. if (isset($_REQUEST['ref'])) { $ref = $_REQUEST['ref']. $data = $cas->redeem($app. else echo "FAIL". $pass = $_POST['pass']. $cas->setConfig($config).php PHP Code: require 'init. ''. 'sso').

Pertama untuk port internal..'?ref='. $loginpage = '/login/login. $ticket). } $ticket = $_GET['ticket']. $status = $cas->register($url. $cas->redeem($url. else echo "fail". $url $app $cas $uid ?> Jadi total ada 3 project disini. 'testapp'. $cas = new CasClient($app). registration ke CAS hanya cukup satu kali seumur hidup program.php'. $app). die(). ane lupa.php'.php"> <input type="hidden" name="ref" value="<? echo $ref. $url = 'http://localhost:8000/register. Kemudian pada server client. dan client application. echo $uid. sehingga bisa dilakukan pengiriman ke beberapa aplikasi yang terdaftar pada CAS.php'. kemudian port external. if ($status) echo "OK".<form method="post" action="/login/login. = = = = 'http://localhost:8000/redeem.inc'. Tiket bisa agan simpan pada AJAX..$loginpage. ?>" /> User: <input type="textbox" name ="user" /><br/> Pass: <input type="password" name ="pass" /><br/> <input type ="submit" value ="Login"/> </form> Hanya itu saja pada publik. Jadi ga perlu tiap mau redeem harus register. EDIT: Oh. dan ini adalah untuk login PHP Code: <?php require_once 'init. if (!isset($_GET['ticket'])) { header('location: '. $app = 'testapp'. new CasClient('testapp'). entah di mana Untuk melakukan registrasi: PHP Code: require_once('init.$_SERVER['PHP_SELF'] ).inc'). Semoga bisa bermanfaat untuk agan. .

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->