我正在观看有关使用OOP的CMS教程 - PHP
我需要知道如何在同一个文件中调用公共静态函数From类,或者包含
控制页面上的:
<?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 :(得分: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 string作为索引发送来调用System中的静态函数。如globals.php中所述,mysql实例在'db'索引中初始化,以便返回一个mysql元素。
其次, - &gt;基本上调用元素的内部方法,所以这意味着你基本上会做类似于$mysql->Execute(..)
的事情。在这种情况下,此方法需要一个字符串作为查询,因此您基本上将其作为参数发送,然后在mysql.php中执行。
希望我帮助过。
答案 1 :(得分:0)
调用静态函数外部类: {类名称} :: {StaticFunctionName}();
调用静态函数内部类: 自:: {StaticFunctionName}();
现在您的具体电话:
System :: Get(&#39; db&#39;) - &gt;执行(&#34; DELETE FROM users
WHERE id
= 2&#34;);
System类是一个静态类,它将类的实例作为singloton进行管理。所以你可以在任何地方打电话给那些像“&#39; db&#39 ;;
System :: Get(&#39; db&#39;):返回&#39; db&#39;的单周期。类。它是一个非静态的对象。
System :: Get(&#39; db&#39;) - &gt;执行:调用函数&#39;执行&#39; &#39; db&#39;类。 &#39; db&#39; class必须是不同存储之间的负载均衡器。您的配置必须设置为mysql。所以System :: Get(&#39; db&#39;) - &gt;执行必须调用mysql-&gt;执行()。
注意:&#34; DELETE FROM users
WHERE id
= 2&#34; =&GT;如果&#39; id&#39;是主键,在查询结束时添加&#39; LIMIT 1&#39;。它在删除1行后停止查询。