MySQL — Php-вызов статической функции

я смотрю учебники о 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")

мне нужно разъяснение для этого пути

и нужно знать, как правильно вызывать статическую функцию

0

Решение

Взглянув на ваш исходный код, мы увидим класс 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.

Надеюсь, я помог.

2

Другие решения

Для вызова статической функции внешнего класса:
{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 строки.

0

По вопросам рекламы [email protected]