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.
class SomeClass
{
private $name;
private $price;
private $photo;
private $description;
public function SomeClass() {}
protected function setName($name) { $this->name = $name; }
public function GetName() { return $this->name; }
protected function setPrice($price = '0.00') { $this->price = $price; }
public function GetPrice() { return $this->price; }
protected function setPhoto($photo) { $this->photo = $photo; }
public function GetPhoto() { return $this->photo; }
protected function setDescription($description) { $this->description = $description; }
public function GetDescription() { return $this->description; }
}
class OtherClass extends SomeClass
{
private $model;
public function Car($name, $model, $price, $photo, $description)
{
parent::setName($name);
$this->setModel($model);
parent::setPrice($price);
parent::setPhoto($photo);
parent::setDescription($description);
}
private function setModel($model) { $this->model = $model; }
public function GetModel() { return $this->model; }
}
class test1 {
private static $view;
private static $register = null;
public function getInstante() {
if(self::$register == null) {
self::$register = new self();
}
return self::$register;
}
public function setView($view) {
self::$view = $view;
}
public function getView() {
return self::$view;
}
}
class test2 {
public $t = 12345;
}
$t = test1::getInstante()->setView(new test2());
var_dump(test1::getView());
function load_class( $class ){
static $objects = array();
if( isSet($objects[$index]) )
return $objects[$index]; //връща инстанцията на класа
// надолу ти е кода за инстанцииране на класа
}
Class Controller{
public function __get( $index ){
return load_class( $index );
}
}
interface Singleton {}
interface Multiton {}
class Base
{
static $singletons = array();
static $multitons = array();
static function get($class_name)
{
if (isset(Base::$singletons[$class_name])){
return Base::$singletons[$class_name];
}
$construct_params = func_get_args();
array_shift($construct_params);
if(isset(Base::$multitons[$class_name])){
return Base::$multitons[$class_name]/*[$multiton_param_processed]*/;
}
$reflection = new ReflectionClass($class_name);
if (null === $reflection->getConstructor()){
$new_instance = $reflection->newInstance();
}
else{
$new_instance = $reflection->newInstanceArgs($construct_params);
}
if ($reflection->isSubclassOf('Singleton')){
return Base::$singletons[$class_name] = $new_instance;
}
if ($reflection->isSubclassOf('Multiton')){
/*if (!isset($multiton_param_processed)){
$multiton_param_processed = call_user_func_array(array($class_name, 'getFace'), $construct_params);
}*/
return Base::$multitons[$class_name]/*[$multiton_param_processed]*/ = $new_instance;
}
return $new_instance;
}
}
require_once "Base.php";
$DB = Base::get('Database', 'DBHOST', 'DBUSER', 'DBPASS', 'DBNAME');
$DB->connect();
class Database implements Multiton
{
private $_HOST, $_USER, $_PASS, $_DB, $_link;
public function __construct($host, $user, $pass, $db)
{
$this->_HOST = $host;
$this->_USER = $user;
$this->_PASS = $pass;
$this->_DB = $db;
}
private function connect()
{
$this->_link = mysql_connect($this->_HOST, $this->_USER, $this->_PASS);
if(!$this->_link){
die(mysql_error($this->_link));
} else {
mysql_select_db($this->_DB, $this->_link);
}
}
$PG = Base::get('Pagination');
//и от там
$PG->show(); //или там както си си направил функциите
class Example1 {
public $var;
public function setvar($v) {
$this->var = $v;
}
}
class PrimeClass {
public $instanceEx1 = null;
public $some;
public $someother;
function __construct() {
$this->instanceEx1 = new Example();
}
function Ne6tosi() {
.....
$this->instanceEx1->setvar(10);
.....
}
}
сега
$c = new PrimeClass();
$c->instanceEx1->setvar(5);
F1r3Fl3x каза:Сигурно говори за Reflection_class
Той е от базовите класовете на PHP.
Според мен няма нужда да се използва защото може да се направи и по следният по-прост начин:
Но не знам от коя версия на PHP се поддържа този синтаксис.Код:$class = 'some_class'; $inst = new $clsss();
$IN->име-на-клас->функция/променлива
class Base {
private $objects = array();
public function addLib( $name ){
include( "libs/{$name}.class.php" ); //Зареждаме файла с класа
$this -> objects[$name] = new $name(); //добавяме инстанцията към главния масив
return $this -> objects[$name]; //връщаме инстанцията на обекта
}
public function __get( $index ){
if( isSet($this -> objects[$index]) )
return $this -> objects[$index];
else
return false;
}
}
$base = new Base;
$base -> addLib( 'session' ); // Зарежда файла libs/session.class.php и инстанциира клас session
// Чрез магическата функция __get имаме достъп до инстанцията на класа чрез $base -> session
$base -> session -> start();
F1r3Fl3x каза:Не си ме разбрал @relax15pyt
Имах предвид нещо от сорта:
И ето как ще работиКод:class Base { private $objects = array(); public function addLib( $name ){ include( "libs/{$name}.class.php" ); //Зареждаме файла с класа $this -> objects[$name] = new $name(); //добавяме инстанцията към главния масив return $this -> objects[$name]; //връщаме инстанцията на обекта } public function __get( $index ){ if( isSet($this -> objects[$index]) ) return $this -> objects[$index]; else return false; } }
Просто е по-удобно инстанциите да са в масив, а не пръснати като променливи в самия клас. По-лесно се работи с тях, като са в масивКод:$base = new Base; $base -> addLib( 'session' ); // Зарежда файла libs/session.class.php и инстанциира клас session // Чрез магическата функция __get имаме достъп до инстанцията на класа чрез $base -> session $base -> session -> start();![]()