在PHP中使用单例而不是全局的数据库连接有什么好处?我觉得使用单例而不是全局会使代码变得不必要地复杂化.
$conn = new PDO(...);
function getSomething()
{
global $conn;
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
class DB_Instance
{
private static $db;
public static function getDBO()
{
if (!self::$db)
self::$db = new PDO(...);
return self::$db;
}
}
function getSomething()
{
$conn = DB_Instance::getDBO();
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
如果有一种更好的方法来初始化除全局或单例之外的数据库连接,请提及它并描述它相对于全局或单例的优势.
我知道有两种方法可以访问PHP类 - "::"和" - >".有时一个似乎对我有用,而另一个没有,我不明白为什么.
每种方法的好处是什么,使用哪种方式都是正确的?
我有一个名为全局范围的变量${SYSTEM},其中SYSTEM是一个已定义的常量.我有很多类需要访问这个变量的函数,我发现global ${SYSTEM};每次都声明这很烦人.
我尝试声明一个类变量:public ${SYSTEM} = $GLOBALS[SYSTEM];但是这会导致语法错误很奇怪,因为我有另一个以这种方式声明类变量的类,似乎工作正常.我唯一能想到的是这个常数没有得到认可.
我已经设法用一个构造函数来解决这个问题,但我正在寻找一个更简单的解决方案.
编辑 全局$ {SYSTEM}变量是一个包含许多其他子数组的数组.不幸的是,似乎没有办法绕过使用构造函数...
我目前正在创建博客系统,我希望将来可以变成一个完整的CMS.
有两个类/对象可用于全局访问(mysqli数据库连接和一个用于检查用户是否已登录的自定义类).
我正在寻找一种不使用全局对象的方法,如果可能的话,每次调用时都不会将对象传递给每个函数.
我有一个与memcache服务器交互的类.我有不同的功能来插入,删除和检索数据.最初每个函数都调用了memcache_connect(),但这是不必要的,例如:
mc->insert()
mc->get()
mc->delete()
Run Code Online (Sandbox Code Playgroud)
会做三个memcache连接.我通过为类创建一个构造来解决这个问题:
function __construct() {
$this->mem = memcache_connect( ... );
}
Run Code Online (Sandbox Code Playgroud)
然后$this->mem在需要资源的任何地方使用,因此三个函数中的每一个都使用相同的memcache_connect资源.
这没关系,但是如果我在其他类中调用类,例如:
class abc
{
function __construct() {
$this->mc = new cache_class;
}
}
class def
{
function __construct() {
$this->mc = new cache_class;
}
}
Run Code Online (Sandbox Code Playgroud)
然后memcache_connect,当它只需要一个时,它仍然会进行两次调用.
我可以用全局变量做到这一点,但如果我不需要,我宁愿不使用它们.
示例全局实现:
$resource = memcache_connect( ... );
class cache_class
{
function insert() {
global $resource;
memcache_set( $resource , ... );
}
function get() {
global $resource;
return memcache_get( $resource …Run Code Online (Sandbox Code Playgroud) 我认为通常我们使用静态方法,因为我们不需要实例化对象.我们可以className::staticFunction用来调用静态方法,今天发现bub:
<?php
class Foo {
static public function helloWorld() {
print "Hello world " ;
}
}
Foo::helloWorld();
Run Code Online (Sandbox Code Playgroud)
<?php
class Foo {
public function helloWorld() {
print "Hello world " ;
}
}
Foo::helloWorld();
Run Code Online (Sandbox Code Playgroud)
题:
以上两个脚本都有效.我们没有声明函数static,我们仍然可以className::staticFunction用来调用函数.为什么我们需要使用静态方法?
如果这对于经验丰富的PHP用户来说显而易见,我深表歉意,但是,我相信我错过了我学习历程中的一个重要障碍.使用对象时,我现在如何通过 - >调用该函数或使用::调用它.目前我只使用了 - >方法,但是我遇到了使用::方法的代码.非常感谢任何见解或解释!
我知道根据this有很多信息,但我找不到任何真正有用和可以理解的信息。那么public static function和之间有什么区别public function?为什么有时我必须使用这个词static?
我知道静态函数由::和非静态函数调用->,但真正的区别(为什么有时我应该使用static我不明白)。据我所知,当我使用 时static,我可以从另一个类调用它。没有它 - 我不能。但我很确定我错了。
我认为这些信息对很多人真的很有帮助。感谢您花时间尝试解释它。