Php- 调用静态函数
Php- calling static function
我正在观看有关使用 OOP 的 CMS 的教程 - PHP
我需要知道如何从同一文件中的 class 或包含
调用 public 静态函数
在控制页面上:
<?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;
}
}
我需要更多说明
他正在以这种方式从 class 系统调用函数
System::Get('db')->Execute("DELETE FROM `users` WHERE `id`= 2")
我需要这种方式的说明
并且需要知道如何以正确的方式调用静态函数
调用外部静态函数 class :
{类名}::{StaticFunctionName}();
在内部调用静态函数 class :
self::{StaticFunctionName}();
现在您的具体电话:
System::Get('db')->执行("DELETE FROM users
WHERE id
= 2");
class 系统是一个静态的 class 系统,它将 classes 的实例作为单例进行管理。所以你可以到处调用这些单子,比如 'db';
System::Get('db') : return 'db' class 的单子。它是一个非静态对象。
System::Get('db')->执行:调用'db'class的函数'Execute'。 'db' class 必须是不同存储之间的负载均衡器。您的配置必须设置为 mysql。所以 System::Get('db')->Execute 必须调用 mysql->Execute().
注意:"DELETE FROM users
WHERE id
= 2" => 如果 'id' 是主键,则在查询末尾添加 'LIMIT 1'。删除 1 行后停止查询。
通过查看您的源代码,我们可以看到系统 class,根据定义,它有两个方法:
商店:
self::$objects[$index] = $value;
得到:
return self::$object[$index];
快速浏览一下,您会发现 Get 函数不会 return 存储任何内容,因为对象与对象不是同一个数组。这是一个 错别字
修复此问题后,一切都应该正常工作,通过使用 System::Get,您只需从 mysql class 获取实例,然后照常调用该方法即可。
编辑:根据要求,这里是对这段代码的解释:
System::Get('db')->Execute("DELETE FROM `users` WHERE `id`= 2")
让我们把它分成两部分。 System::Get('db')
通过发送数据库字符串作为索引从系统调用获取静态函数。如 globals.php 中所述,mysql 实例在 'db' 索引中初始化,因此 return 一个 mysql 元素。
其次,-> 基本上调用元素的内部方法,所以这意味着基本上你会做类似于 $mysql->Execute(..)
的事情。在这种情况下,此方法需要一个字符串作为查询,因此您基本上是将其作为参数发送,然后在 mysql.php.
中执行
希望我有所帮助。
我正在观看有关使用 OOP 的 CMS 的教程 - PHP
我需要知道如何从同一文件中的 class 或包含
调用 public 静态函数在控制页面上:
<?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;
}
}
我需要更多说明
他正在以这种方式从 class 系统调用函数
System::Get('db')->Execute("DELETE FROM `users` WHERE `id`= 2")
我需要这种方式的说明
并且需要知道如何以正确的方式调用静态函数
调用外部静态函数 class : {类名}::{StaticFunctionName}();
在内部调用静态函数 class : self::{StaticFunctionName}();
现在您的具体电话:
System::Get('db')->执行("DELETE FROM users
WHERE id
= 2");
class 系统是一个静态的 class 系统,它将 classes 的实例作为单例进行管理。所以你可以到处调用这些单子,比如 'db';
System::Get('db') : return 'db' class 的单子。它是一个非静态对象。
System::Get('db')->执行:调用'db'class的函数'Execute'。 'db' class 必须是不同存储之间的负载均衡器。您的配置必须设置为 mysql。所以 System::Get('db')->Execute 必须调用 mysql->Execute().
注意:"DELETE FROM users
WHERE id
= 2" => 如果 'id' 是主键,则在查询末尾添加 'LIMIT 1'。删除 1 行后停止查询。
通过查看您的源代码,我们可以看到系统 class,根据定义,它有两个方法:
商店:
self::$objects[$index] = $value;
得到:
return self::$object[$index];
快速浏览一下,您会发现 Get 函数不会 return 存储任何内容,因为对象与对象不是同一个数组。这是一个 错别字
修复此问题后,一切都应该正常工作,通过使用 System::Get,您只需从 mysql class 获取实例,然后照常调用该方法即可。
编辑:根据要求,这里是对这段代码的解释:
System::Get('db')->Execute("DELETE FROM `users` WHERE `id`= 2")
让我们把它分成两部分。 System::Get('db')
通过发送数据库字符串作为索引从系统调用获取静态函数。如 globals.php 中所述,mysql 实例在 'db' 索引中初始化,因此 return 一个 mysql 元素。
其次,-> 基本上调用元素的内部方法,所以这意味着基本上你会做类似于 $mysql->Execute(..)
的事情。在这种情况下,此方法需要一个字符串作为查询,因此您基本上是将其作为参数发送,然后在 mysql.php.
希望我有所帮助。