- Katılım
- 2 Mar 2015
- Konular
- 59,189
- Mesajlar
- 88,439
- Çözüm
- 109
- Online süresi
- 4mo 16d
- Reaksiyon Skoru
- 14,280
- Altın Konu
- 2,398
- TM Yaşı
- 11 Yıl 3 Ay 6 Gün
- Başarım Puanı
- 1,051
- MmoLira
- 695,092
- DevLira
- 234
ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!
Yazılım mühendisliği teorisinde, "Tasarım desenleri" terimi genellikle yaygın olarak ortaya çıkan sorunları ele almak için uygulamalar geliştirmek için bir şablon olarak kullanılabilen yeniden kullanılabilir bir çözümü ifade eder. Yazılım çözümleri geliştirirken yazılım tasarım desenlerini resmileştirilmiş en iyi uygulamalar olarak düşünebilirsiniz.
Standart tasarım kalıplarının çoğu PHP'de uygulama geliştirmede çok etkili bir şekilde uygulanabilir. Bu bölümde, popüler tasarım kalıplarından bazılarının PHP uygulamaları geliştirmede nasıl uygulanacağını öğreneceğiz.
Singleton deseninin tipik uygulaması, bir uygulamanın yaşam süresi boyunca bir kez oluşturulması gereken bir veritabanı bağlantı nesnesinin oluşturulmasıdır.
Aşağıdaki çıktıyı üretecektir:
Aşağıdaki çıktıyı üretecektir:
Aşağıdaki çıktıyı üretecektir:
Bir uygulamada her katmanın rolünün ayrılması şu şekildedir:
Uygulamanın sunum katmanı, bir HTML formu oluşturan view.php'dir. Kullanıcı, verileri bir denetleyici betiğine gönderir. Denetleyici tarafından döndürülen sonuç, biraz JavaScript ile web sayfasında oluşturulur.
Denetleyici betiği model.php gerektirir ve veritabanı nesnesini kullanır, veriyi veritabanından almak için select metodunu çağırır. Sonuç, görünüm sayfasında erişilebilmesi için geçerli oturumda saklanır.
Uygulamanın model katmanı "model.php" dosyasında kodlanmıştır. PDO eklentisini kullanarak mydb isimli mysql veritabanına bağlantı kurar.
Arka uç mydb veritabanında ID ve NAME alanlarına sahip bir kullanıcılar tablosu bulunmalıdır.
Tarayıcıda "
Standart tasarım kalıplarının çoğu PHP'de uygulama geliştirmede çok etkili bir şekilde uygulanabilir. Bu bölümde, popüler tasarım kalıplarından bazılarının PHP uygulamaları geliştirmede nasıl uygulanacağını öğreneceğiz.
Tekil Desen
Tekil tasarım deseni, belirli bir sınıfın nesnesinin örneklemesini yalnızca bir örnekle sınırlamak istediğinizde kullanışlıdır. "Tekil desen" adı, Matematikteki tekil kavramından gelir. Tekil desen, uygulama boyunca yalnızca bir örneğin olmasını ve buna küresel erişim sağlanmasını garanti eder.Singleton deseninin tipik uygulaması, bir uygulamanın yaşam süresi boyunca bir kez oluşturulması gereken bir veritabanı bağlantı nesnesinin oluşturulmasıdır.
Örnek
Aşağıdaki kodda, DataBaseConnector sınıfı yalnızca bir kez örneklendirilebilir, aksi takdirde yinelenen nesneye izin vermeyen bir mesaj verilir.
PHP:
<?php
class DataBaseConnector {
private static $obj;
private final function __construct() {
echo __CLASS__ . " object created for first time ". PHP_EOL;
}
public static function getConnect() {
if (!isset(self::$obj)) {
self::$obj = new DataBaseConnector();
return self::$obj;
} else {
echo "connection object could not be created again" . PHP_EOL;
}
}
}
$obj1 = DataBaseConnector::getConnect();
$obj2 = DataBaseConnector::getConnect();
var_dump($obj1 == $obj2);
?>
Aşağıdaki çıktıyı üretecektir:
DataBaseConnector object created for first time
connection object could not be created again
bool(false)
Fabrika Deseni
Bu en yaygın kullanılan tasarım desenlerinden biridir. Bu desende, istenen sınıfın nesnesini doğrudan bildirmezsiniz, ancak statik yöntemi gerekli nesneyi oluşturan başka bir sınıf sağlanır.Örnek
Aşağıdaki örnek fabrika tasarım deseninin nasıl çalıştığını göstermektedir:
PHP:
<?php
class Automobile {
private $bikeMake;
private $bikeModel;
public function __construct($make, $model) {
$this->bikeMake = $make;
$this->bikeModel = $model;
}
public function getMakeAndModel() {
return $this->bikeMake . ' ' . $this->bikeModel;
}
}
class AutomobileFactory {
public static function create($make, $model) {
return new Automobile($make, $model);
}
}
$pulsar = AutomobileFactory::create('ktm', 'Pulsar');
print_r($pulsar->getMakeAndModel());
?>
Aşağıdaki çıktıyı üretecektir:
ktm Pulsar
Strateji Deseni
Strateji kalıbı, belirli algoritma ailelerini kapsüllediğiniz ve istemci sınıfının belirli bir algoritmayı örneklemesinden sorumlu olmasına izin verdiğiniz bir yaklaşımı önerir. Kalıbı uygulayan sınıfın gerçek uygulama hakkında bilgisi yoktur.Örnek
İşte strateji deseninin kullanımını gösteren bir kod. case() metodu iki farklı sınıf tarafından farklı şekilde uygulanan bir arayüzümüz var. testdata sınıfının nesnesi, kendi process() metodu aracılığıyla ilgili case() metotlarını dolaylı olarak çağırır.
PHP:
<?php
interface example {
public function case($str);
}
class ucase implements example {
public function case($str) {
return strtoupper($str);
}
}
class lcase implements example {
public function case($str) {
return strtolower($str);
}
}
class testdata {
private $data;
public function __construct($input) {
$this->data = $input;
}
public function process(example $type) {
return $this->data = $type->case($this->data);
}
}
$str = "hello";
$obj = new testdata($str);
echo $obj->process(new ucase) . PHP_EOL;
$str = "HELLO";
echo $obj->process(new lcase);
?>
Aşağıdaki çıktıyı üretecektir:
HELLO
Hello
MVC Tasarım Deseni
Model, View ve Controller'ın kısaltması olan MVC, çok popüler bir yazılım mimarisi desenidir. Laravel, Symfony vb. gibi PHP ağlarının çoğu MVC mimarisini uygular.Bir uygulamada her katmanın rolünün ayrılması şu şekildedir:
- Model − Veri yapısını ifade eder. Bu durumda, veritabanı.
- Görünüm − Kullanıcı arayüzünü ifade eder: HTML ve CSS.
- Denetleyici − İşlemi yapan "aracı". Görünümden girdiyi kabul eder ve modelle çalışır. Kendi kendini açıklayan, PHP betikleri ve kütüphaneleri.
Örnek
Aşağıdaki örnekte MVC tasarım desenini saf PHP, JavaScript ve HTML'de uygulayalım:Uygulamanın sunum katmanı, bir HTML formu oluşturan view.php'dir. Kullanıcı, verileri bir denetleyici betiğine gönderir. Denetleyici tarafından döndürülen sonuç, biraz JavaScript ile web sayfasında oluşturulur.
view.php
<!DOCTYPE html>
<html>
<head>
<title>View (User Interface)</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<form id="mysearch" action="controller.php" method="POST">
<input type="text" id = "nm" name="search" required>
<input type="submit" value="Search">
</form>
<div id="results"></div>
<script>
let results = document.getElementById("results");
results.innerHTML = "";
</script>
<?php
session_start();
if (isset($_SESSION['result'])) {
$arr=$_SESSION['result'];
foreach ($arr as $obj) {?>
<script>
results.innerHTML += "<div><?php echo $obj['id'] . "-" .
$obj['name'] . "</div>"; ?>";
</script>
<?php
}
}
?>
</body>
</html>
Denetleyici betiği model.php gerektirir ve veritabanı nesnesini kullanır, veriyi veritabanından almak için select metodunu çağırır. Sonuç, görünüm sayfasında erişilebilmesi için geçerli oturumda saklanır.
controller.php
PHP:
<?php
session_start();
require "model.php";
$results = $_DB->select(
"SELECT * FROM `users` WHERE `name` LIKE ?",
["%{$_POST["search"]}%"]
);
$_SESSION['search'] = $_POST['search'];
$_SESSION['result'] = $results;
Header("Location: view.php", true);
?>
Uygulamanın model katmanı "model.php" dosyasında kodlanmıştır. PDO eklentisini kullanarak mydb isimli mysql veritabanına bağlantı kurar.
model.php
PHP:
<?php
class DB {
public $error = "";
private $pdo = null;
private $stmt = null;
var $dsn="localhost";
var $dbName="myDB";
var $username="root";
var $password="";
function __construct () {
$this->pdo = new PDO("mysql:host=$this->dsn;dbname=$this->
dbName",$this->username,$this->password);
}
function __destruct () {
if ($this->stmt!==null) { $this->stmt = null; }
if ($this->pdo!==null) { $this->pdo = null; }
}
function select ($sql, $data=null) {
$this->stmt = $this->pdo->prepare($sql);
$this->stmt->execute($data);
return $this->stmt->fetchAll();
}
}
$_DB = new DB();
?>
Arka uç mydb veritabanında ID ve NAME alanlarına sahip bir kullanıcılar tablosu bulunmalıdır.
-- Table structure for table `users`
--
CREATE TABLE `users` (
`id` bigint(20) NOT NULL,
`name` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
--
-- Dumping data for table `users`
--
INSERT INTO `users` (`id`, `name`) VALUES
(21, 'Ahmad Shaikh'),
(24, 'Akshay Wadkar'),
(26, 'Bridget Wooten'),
(10, 'Coby Kelleigh'),
(20, 'Dashan Shah'),
(12, 'Elizabeth Taylor'),
(41, 'Issac Newton'),
(34, 'Julia Roberts'),
(31, 'Junior Mahmood'),
(32, 'Kailas Bende'),
(47, 'Karan Sharma'),
(16, 'Kenneth Sanders'),
(28, 'Kirstie Thomas'),
(33, 'Lawrence Murphy'),
(14, 'Leah Shan'),
(51, 'Marcus Best'),
(29, 'Maya Pande'),
(50, 'Nathaniel Khan'),
(6, 'Richard Breann'),
(54, 'Rowan Avalos'),
(3, 'Rusty Terry'),
(37, 'Sacha Gross'),
(27, 'Sally Castillo'),
(11, 'Sarah Sanders'),
(18, 'Seth Sonnel'),
(38, 'Shannon Peterson'),
(25, 'Shayan Clements'),
(49, 'Shoaib Vickers'),
(43, 'Simran Kaur'),
(35, 'Sulaiman Gilmour'),
(44, 'Taran Morin'),
(48, 'Taran Morin'),
(22, 'Thelma Kim'),
(8, 'Tillie Sharalyn'),
(36, 'Virgil Collier');
Tarayıcıda "
Linkleri görebilmek için Turkmmo Forumuna ÜYE olmanız gerekmektedir.
" adresini ziyaret ederek uygulamayı başlatın. Gerekli harflere sahip isimlere karşılık gelen bir arama terimi girin.



