Pemrograman Web ~ OOP menggunakan PHP -Autoloading
Assalamualaikum Warohmarullahi Wabarokatu
Hihihii kembali lagi dengan saya ,sepertiyang saya katakan pada artikel sebelumnya kali ini saya akan membahas tentang Autoloading dalam OOP menggunkan PHP.
Autoload
Banyak pengembang yang membuat aplikasi berorientasi objek membuat satu file sumber PHP per definisi Class. Salah satu gangguan terbesar adalah harus menulis daftar panjang yang diperlukan termasuk pada awal setiap skrip.
di PHP 5, ini tidak lagi diperlukan . Fungsi spl_autoload_register() mendaftarkan sejumlah autoloader,memungkinkan Class dan antarmuka dimuat secara otomatis jika mereka saat ini tidak didefenisikan. Dengan mendaftarkan autoloaders, PHP diberikan kesempatan terakhir untuk memuat Class atau antarmuka sebelum gagal dan error.
Contoh
<?php
spl_autoload_register(function ($class_name) {
include $class_name . 'php';
});
Object Interface
Object Interface memungkinkan anda membuat kode yang menentukan METHOD mana yang harus diimplementasikan oleh suatu Class, tanpa harus menentukan bagaimana method ini diterapkan. Interface menggantikan kata kunci Class dan tanpa method apa pun yang memiliki kontennya ditentukan.
Semua method yang dideklarasikan diInterface harus bersifat public ; ini adalah sifat Interface. Perhatikan bahwa dimungkinkan untuk mendeklarasikan konstruktor diinterface, apa yang bisa berguna dalam beberapa konteks.
Implements
Untuk mengimplementasikan interface, operator implement digunakan. Semua method dalam interface harus diimplementasikan dalam Class, error akan menghasilkan kesalahan fatal. Class dapat diimplement lebih dari satu interface jika diinginkan.
Contoh Interface & Implements
1.Interface.php
<?php
interface iTemplate
{
public function setVariable($nama, $var);
public function getHtml($template);
}
class Tamplate implements iTemplate
{
private $vars = array();
public function setVariable($nama, $var)
{
$this->vars[$nama] = $var;
}
public function getHtml($template)
{
foreach ($this->vars as $nama => $value) {
$template = str_replace('{' . $nama . '}', $value, $template);
}
return $template;
}
}
class BadTemplate implements iTemplate
{
private $vars = array();
public function setVariable($nama, $var)
{
$this->vars[$nama] = $var;
}
}
2.ExtendableInterface.php
<?php
interface a
{
public function foo();
}
interface b extends a
{
public function baz();
}
class c implements b
{
public function foo()
{
}
public function baz()
{
}
}
interface d extends a, b
{
public function bar();
}
class e implements d
{
public function foo()
{
}
public function baz()
{
}
public function bar()
{
}
}
3.InterfaceConstans.php
<?php
interface a
{
const b = 'Interface constant';
}
echo a::b;
class b implements a
{
const b = 'Class constant';
}
Visiblity
Visibilitas dari sebuah , Method atau(pada PHP 7.1.0) sebuah konstanta dapat didefinisikan dengan mengawali deklarasi dengan kata kunci publik ,protacted atau private. Anggota class dideklarasikan agar dapat diakses dimana aja. Anggota yang dinyatakan protacted hanya dapat diakses didalam class itu sendiri dan dengan mewarisi class induk. Anggota yang dinyatakan sebagai private hanya dapat diakses oleh class yang mendefinisikan anggotanya.
Property Visibility
Class property harus didefenisikan sebagai public ,private, atau protacted. Jika dideklerasikan menggunakan var, properti akan didefinisikan sebagai public.
Contoh
PropertyDeclaration.php
<?php
class MyClass
{
public $public = 'public';
protected $protected = 'protected';
protected $private = 'private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public;
//echo $obj->protected;
//echo $obj->private;
$obj->printHello();
class MyClass2 extends MyClass
{
public $public = 'public2';
protected $protected = 'protected2';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj2 = new MyClass2();
echo $obj2->public;
//echo $obj2->protected;
//echo $obj2->private;
$obj2->printHello();
Method Visibility
class Method dapat didefinisikan sebagai Public, private, atau protected. Method yang dinyatakan tanpa kata kunci akan didefinisikan sebagai public
Contoh
MethodDeclaration.php
<?php
class MyClass
{
public function __construct()
{
}
public function Mypublic()
{
}
public function Myprivate()
{
}
public function Myprotected()
{
}
function foo()
{
$this->Mypublic();
$this->Myprivate();
$this->Myprotected();
}
}
$myclass = new MyClass;
$myclass->Mypublic();
$myclass->Myprotected();
$myclass->Myprivate();
$myclass->foo();
class MyClass2 extends MyClass
{
function foo2()
{
$this->Mypublic();
$this->Myprivate();
$this->Myprotected();
}
}
$myclass2 = new MyClass2;
$myclass->Mypublic();
$myclass2->foo2();
class Bar
{
public function test()
{
$this->testPrivate();
$this->testPublic();
}
private function testPrivate()
{
echo "Bar::testPrivate\n";
}
public function testPublic()
{
echo "Bar::testPublic\n";
}
}
class Foo extends Bar
{
private function testPrivate()
{
echo "Foo::testPrivate\n";
}
public function testPublic()
{
echo "Foo::testPublic\n";
}
}
$myfoo = new Foo();
$myfoo->test();
Visibility Konstanta(constant)
Pada PHP 7.1.0 , konstanta class dapat didefiniskan sebagai public, private, atau protacted . Kontanta yang dideklarasikan tanpa kata kunci didefinisikan sebagai publik.
Contoh
ConstantDeclaration.php
<?php
class MyClass
{
//deklarasi konstanta public
public const MY_PUBLIC = 'public';
//deklarasi konstanta private
private const MY_PRIVATE = 'private';
//deklarasi konstanta protected
protected const MY_PROTECTED = 'protected';
public function foo()
{
echo self::MY_PUBLIC;
echo self::MY_PRIVATE;
echo self::MY_PROTECTED;
}
}
$myclass = new MyClass();
MyClass::MY_PUBLIC; //work
//MyClass::MY_PROTECTED; //fatal error
//MyClass::MY_PRIVATE; //fatal error
$myclass->foo(); //public,protected
class MyClass2 extends MyClass
{
function foo2()
{
echo self::MY_PUBLIC;
//echo self::MY_PRIVATE; error
echo self::MY_PROTECTED;
}
}
$myclass2 = new MyClass2();
echo MyClass2::MY_PUBLIC; //works
$myclass2->foo2();//public,protacted
Visibality dari Objek lain
Objek dengan tipe yang sama akan memiliki akses satu sama lain, private dan protacted meskipun bukan pada instance yang sama. Ini karena detail spesifik implementasinya sudah diketahui kitaka berada didalam objek tersebut.
Contoh
VisibalityObject.php
<?php
class test
{
private $foo;
public function __construct($foo)
{
$this->foo = $foo;
}
private function bar()
{
echo 'Accessed the private method';
}
public function baz(test $other)
{
//kita bisa mengubah properti private
$other->foo = 'hello';
var_dump($other->foo);
//kita bisa memanggil method private
$other->bar();
}
}
$tes = new test('tes');
$tes->baz(new test('other'));
Comments
Post a Comment