Follow along with the video below to see how to install our site as a web app on your home screen.
Бележка: This feature may not be available in some browsers.
Окей, значи не съм те разбрал много правилно в предният ти пост.macmen каза:Та за абстракния class има смисал
ако работиш голям проект, защото както знаем за разлика от java или python, кодовете на php може да се напишат по различни начини, Та затова се прявят interface за да се придържа някакав стил. Имах един програмист който си правеше по 100 coonection към дб-то преди да обработи ифнотмацията.
демек
$a = new db();
$b = new db();
$c = new db();
......
ако направиш class config(примерно) и db абстракт до някъде ще и защитиш. След това singleton и т.н
Jorko каза:Така ще ви помоля някой който е запознат с ООП да разкаже малко за singelton че в Wikipedia е на английски език.
И също така къде и кога е добре да се използва в PHP(singelton).
Jorko каза:Така ще ви помоля някой който е запознат с ООП да разкаже малко за singelton че в Wikipedia е на английски език.
И също така къде и кога е добре да се използва в PHP(singelton).
<?php
class Database
{
[...]
}
class Connections
{
private static $mainDb = null;
public function getMain()
{
if (!self::$mainDb)
self::$mainDb = new Database(...);
return self::$mainDb;
}
}
// Нейде в кода
$db = Connections::getMain();
$db->query(...); // и т.н.
Да. Ясно вече какво си имал предвидmacmen каза:Общо взето всичко се свежда до едно design patterns. Трябва да структурирате така кода, че всички който рабитиш да го разбират.
Аз какво правя. Забравянвам всякакав достъп до config object-
имам един Registry object
забравявам controller с controller да си взаймодействат.
Забранявам всичко що е функция към дб-то да излиза извън модела(все пак модела е за това).
абстрактен клас това си е обикновен клас но на него не може да се направи инстанция.
Пример
abstract class DB(){
function c(){}
}
$db = new DB # ще throw грешка, че не може да се прави инстанция на класа
но ако имаш
class foo extends DB{
,.....
}
class foo вече има достъп до методите на класа
и т.н
една от големите грешки на начинаещите е да направи така
class cla extends DB{}
$d = new cla();
това е голяма грешка!!!!!
Смисъл да направи един празен class само за да има инстанция до abstract class-a
macmen каза:Смисъл да направи един празен class само за да има инстанция до abstract class-a
Липсата на опит води до трагични случай.Същото и в математиакта, като нямаш познания , и 2 часа да седиш на тази задача, няма да измислиш нова математика...macmen каза:Повярвай ми какво ли не съм виждал, затова пиша interface че да се сещат![]()
macmen каза:Странен е,но върши доста работа. Караш ги да пишат заявки само в модела а не да ги разхвърля наляво надясно. Е той ако иска може да го плосне където си иска реално.
Много е важно какъв е проекта, ако е някой малък и ти си единствен програмист, то няма нужда от усложнения толкова, но ако е голям и са намесети git и т.н, то тогава трябва да се помисли в началото, че след това стават едни workaround-и
macmen каза:Странен е,но върши доста работа. Караш ги да пишат заявки само в модела а не да ги разхвърля наляво надясно. Е той ако иска може да го плосне където си иска реално.
Много е важно какъв е проекта, ако е някой малък и ти си единствен програмист, то няма нужда от усложнения толкова, но ако е голям и са намесети git и т.н, то тогава трябва да се помисли в началото, че след това стават едни workaround-и
class DB {
private $connection = null;
private function __construct() {}
public static function connect() {
if(self::$connection == null) {
self::$connection = new PDO();
}
return self::$connection;
}
private function __clone() {}
}
class Model {
$db = null;
public function __construct(Cont $db) {
$this->db = $db->db;
}
/** Razni metodi */
}
class UsersModel extends Model {
/** Razni metodi, koito veche shte imat vruzka sus PDO */
}
class Cont {
public function db() {
return DB::Connect();
}
}
$Model = new Model(new Cont());
/** Durji i classa model */
$UsersModel = new UsersModel();
public function __construct($db) {
$this->db = $db;
}
$Model = new Model(DB::Connect());
class Builder {
public static function Build($Class, $ToWork) {
new $Class(new $ToWork);
}
}
Builder::Build('Model', 'DB');
<?php
class DB {
public function Connect() {
return 'MY PDO CONNECTION';
}
}
class Model {
protected $db = null;
protected $security = null;
public function __construct($objects) {
$this->db = $objects['DB'];
$this->security = $objects['Security'];
/** Testing */
echo $this->db->Connect();
echo '<br />';
echo $this->security->hash('stest');
/** End of testing */
}
public function IsUser($user, $password) {
return $password = $this->security->hash($password);
}
/** Some basic methods for model class */
}
class Users extends Model {
/** The UsersModel methods */
}
class Security {
public function hash($value) {
return md5($value);
}
}
class Builder {
/** Define for every class with, who will work */
private static $data = array(
'Model' => array('Security', 'DB')
);
public static function Build($param) {
$objects = Container::Inject(self::$data[$param]);
return new $param($objects);
}
}
class Container {
private static $objects = array();
private function __construct() {}
public static function Inject($data) {
if(count($data) > 0) {
foreach($data as $method) {
if(!array_key_exists($method, self::$objects)){
self::$objects[$method] = self::$method();
}
}
}
return self::$objects;
}
private static function Security() {
return new Security();
}
private static function DB() {
return new DB();
}
private function __clone() {}
}
/** Creating the Model Class */
Builder::Build('Model');
?>
class Security {
public function hash($value) {
return md5($value);
}
}
Що пък да няма заявки в конролера? Ако искам scalar value, да взема да пиша функция за всяка стойност ли?Ако работиш с някой, който слага заявки в контролера просто няма смисъл от този човек. В това отношение колкото и ограничения да му слагаш все ще бълва некачествен код.
FFDP каза:Хората гледат, да не пишат по принцип излишен код, но ти освен че правиш функция, я добавяш и към клас.Код:class Security { public function hash($value) { return md5($value); } }
Нека и аз да кажа нещо, спазвайте KISS - Keep It Simple Stupid.Ако нещо може да се направи лесно и просто, не се опитвайте да го правите по сложно.Все пак си оставяйте вратичка, ако се наложи ъпгрейд на модула/сайта който правите.
Нека да спомена и за сингълтона.Преди да почнете да го ползвате е хубаво да си изясните каква ви е базата, и как се ползва Connection Pool-a към нея.Не винаги е полезен, за PHP доста често е удачен подари самия lifetime на скрипответе.Пробвайте примерно да го ползвате за връзка с базата в ASP.NET, сайта ви ще забие при повече от един потребител.
Що пък да няма заявки в конролера? Ако искам scalar value, да взема да пиша функция за всяка стойност ли?Ако работиш с някой, който слага заявки в контролера просто няма смисъл от този човек. В това отношение колкото и ограничения да му слагаш все ще бълва некачествен код.
А за това че винаги може да се пише лайнян код, е така ако ще на Assembler да пише пак може кода да заеме достойно място
тук.
http://govnokod.ru
Приятна вечер![]()
Обектно-ориентираното програмиране (ООП) е парадигма в компютърното програмиране, при която една програмна система се моделира като набор от обекти, които взаимодействат помежду си, за разлика от традиционното виждане, в което една програма е списък от инструкции, които компютърът изпълнява. Всеки обект е способен да получава съобщения, обработва данни и праща съобщения на други обекти.strasburg каза:Аз пък изобщо не мога да схвана замисъла на ООП. С php-то също мога да си направя голям сайт...?
strasburg каза:Аз пък изобщо не мога да схвана замисъла на ООП. С php-то също мога да си направя голям сайт...?