я смотрю учебники о CMS с ООП — PHP
мне нужно знать, как вызвать публичную статическую функцию из класса в том же файле или из включения
на контрольной странице:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('globals.php');
if(System::Get('db')->Execute("DELETE FROM `users` WHERE `id`= 2"))
{
echo "Done";
}
else
{
echo "No";
}
?>
system.php:
<?php
class System
{
//objects array
private static $objects = array();
//store object
public static function Store($index,$value)
{
self::$objects[$index] = $value;
}
//return object
public static function Get($index)
{
return self::$object[$index];
}
}
?>
globals.php
<?php
define('ROOT',dirname(__FILE__));
define('INC',ROOT.'/includes/');
define('CORE',INC.'/core/');
define('MODELS',INC.'/models/');
define('CONTROLLERS',INC.'/controllers/');
define('LIBS',INC.'/libs/');
/*
core files
*/
require_once(CORE.'config.php');
require_once(CORE.'mysql.class.php');
require_once(CORE.'raintpl.class.php');
require_once(CORE.'system.php');
System::Store('db',new mysql());
System::Store('tpl',new RainTPL()); //class RainTPL
?>
mysql.php
<?php
/*
*
*/
/**
* Description of mysqli
*
* @author syam
*/
class mysql {
private $connection;
private $last; //last query
public function __construct() {
$this->dbconnect();
$this->Execute('SET NAMES utf8');
}
public function dbconnect()
{
$this->connection = new mysqli(HOSTNAME,USERNAME,PASSWORD,DBNAME);
if($this->connection)
return TRUE;
return FALSE;
}
public function Execute($query)
{
//$query = $this->connection->real_escape_string($query);
if($result = $this->connection->query($query))
{
$this->last = $result;
return TRUE;
}
return FALSE;
}
}
мне нужно больше разъяснений
он вызывает функцию из системы классов таким образом
System::Get('db')->Execute("DELETE FROM `users` WHERE `id`= 2")
мне нужно разъяснение для этого пути
и нужно знать, как правильно вызывать статическую функцию
Взглянув на ваш исходный код, мы увидим класс System, который, как определено, имеет два метода:
Хранить:
self::$objects[$index] = $value;
Получить:
return self::$object[$index];
Беглый взгляд, вы можете понять, что функция Get не будет возвращать то, что было сохранено, поскольку объекты не совпадают с массивом объекта. Это опечатка
Когда это исправлено, все должно работать нормально, используя System :: Get, вы просто получаете экземпляр из класса mysql, а затем просто вызываете метод как обычно.
РЕДАКТИРОВАТЬ: как требуется, вот объяснение этого кода:
System::Get('db')->Execute("DELETE FROM `users` WHERE `id`= 2")
Давайте разделим это на две части. System::Get('db')
Вызывает статическую функцию из системы, отправляя строку db в качестве индекса. Как указано в globals.php, экземпляр mysql инициализируется в индексе ‘db’, чтобы он возвращал элемент mysql.
Во-вторых, -> в основном вызывает внутренние методы элемента, так что это означает, что в основном вы будете делать что-то похожее на $mysql->Execute(..)
, В этом случае этот метод требует строку в качестве запроса, поэтому вы в основном отправляете ее как параметр, который затем выполняется в mysql.php.
Надеюсь, я помог.
Для вызова статической функции внешнего класса:
{Classname} :: {StaticFunctionName} ();
Для вызова статической функции внутреннего класса:
самостоятельно :: {StaticFunctionName} ();
Теперь ваш конкретный звонок:
System :: Get (‘db’) -> Execute («УДАЛИТЬ ИЗ users
ГДЕ id
= 2 «);
Класс System является статическим классом, который управляет экземплярами классов как синглотон. Таким образом, вы можете называть эти синглтоны везде как «db»;
System :: Get (‘db’): возвращает синглотон класса ‘db’. Это не статичный объект.
System :: Get (‘db’) -> Execute: вызвать функцию ‘Execute’ класса ‘db’. Класс ‘db’ должен быть балансировщиком нагрузки между различными хранилищами. Ваш конфиг должен быть установлен на mysql. Поэтому System :: Get (‘db’) -> Execute должна быть вызвана mysql-> Execute ().
Примечание: «УДАЛИТЬ ИЗ users
ГДЕ id
= 2 «=> если« id »является первичным ключом, добавьте в конце запроса« LIMIT 1 ». Это остановит запрос после удаления 1 строки.