-
Notifications
You must be signed in to change notification settings - Fork 0
/
visibility.php
114 lines (91 loc) · 2.96 KB
/
visibility.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
<?php
#9 Visibility
// Konsep yang digunakan untuk mengatur akses dari properti
// dan method pada sebuah objek
// Keyword visibility : public, protected, dan private.
# public
// digunakan dimana saja, bahkan di luar kelas
# protected
// digunakan dalam kelas beserta turunannya
# private
// digunakan hanya di dalam kelas
// visibility hanya memperlihatkan akses dari class yang dibutuhkan saja
// visibility menentukan kebutuhan yang jelas
// memberikan kendali untuk menghindari 'bug'
class Produk {
public $judul,
$creator,
$penerbit;
protected $diskon = 0;
private $harga;
public function __construct($judul = "judul",
$creator = "creator", $penerbit = "penerbit", $harga = 0)
{
$this->judul = $judul;
$this->creator = $creator;
$this->penerbit = $penerbit;
$this->harga = $harga;
}
public function getHarga(){
return $this->harga - ($this->harga * $this->diskon / 100);
}
public function getInfoProduk(){
// Komik : Naruto | Masashi Kishimoto, Shounen Jump (Rp. 30000) - 100 halaman.
$str = "{$this->judul} | {$this->getLabel()} (Rp. {$this->harga})";
return $str;
}
public function sayHello(){
return "Hello World!";
}
public function getLabel(){
return "$this->creator, $this->penerbit";
}
}
class Komik extends Produk {
public $jmlHalaman;
// Overriding constructor
public function __construct($judul = "judul",
$creator = "creator", $penerbit = "penerbit", $harga = 0, $jmlHalaman)
{
parent::__construct($judul, $creator, $penerbit, $harga);
$this->jmlHalaman = $jmlHalaman;
}
public function getInfoProduk()
{
$str = "Komik : " . parent::getInfoProduk() . " - {$this->jmlHalaman} Halaman.";
return $str;
}
}
class Game extends Produk {
public $waktuMain;
// Overriding constructor
public function __construct($judul = "judul",
$creator = "creator", $penerbit = "penerbit", $harga = 0, $waktuMain)
{
parent::__construct($judul, $creator, $penerbit, $harga);
$this->waktuMain = $waktuMain;
}
public function setDiskon($diskon){
$this->diskon = $diskon;
}
public function getInfoProduk()
// overriding method menggunakan ->parent
{
$str = "Game : ". parent::getInfoProduk() ." ~ {$this->waktuMain} Jam.";
return $str;
}
}
class CetakInfoProduk{
public function cetak(Produk $produk){
$str = "{$produk->judul} | {$produk->getlabel()} (Rp. {$produk->harga})";
return $str;
}
}
$produk1 = new Komik("Naruto", "Masashi Kishimoto", "Shounen Jump", 30000, 100);
$produk2 = new Game("Uncharted", "Neil Druckmann", "Sony Computer Entertainment", 250000, 50);
echo $produk1->getInfoProduk();
echo "<br>";
echo $produk2->getInfoProduk();
echo "<hr>";
$produk2->setDiskon(50);
echo $produk2->getHarga();