相关疑难解决方法(0)

Global或Singleton用于数据库连接?

在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 singleton design-patterns

79
推荐指数
3
解决办法
5万
查看次数

PHP类:何时使用:: vs. - >?

我知道有两种方法可以访问PHP类 - "::"和" - >".有时一个似乎对我有用,而另一个没有,我不明白为什么.

每种方法的好处是什么,使用哪种方式都是正确的?

php class

23
推荐指数
4
解决办法
8210
查看次数

使一个全局变量可以访问类中的每个函数

我有一个名为全局范围的变量${SYSTEM},其中SYSTEM是一个已定义的常量.我有很多类需要访问这个变量的函数,我发现global ${SYSTEM};每次都声明这很烦人.

我尝试声明一个类变量:public ${SYSTEM} = $GLOBALS[SYSTEM];但是这会导致语法错误很奇怪,因为我有另一个以这种方式声明类变量的类,似乎工作正常.我唯一能想到的是这个常数没有得到认可.

我已经设法用一个构造函数来解决这个问题,但我正在寻找一个更简单的解决方案.


编辑 全局$ {SYSTEM}变量是一个包含许多其他子数组的数组.不幸的是,似乎没有办法绕过使用构造函数...

php variables global class function

13
推荐指数
3
解决办法
9万
查看次数

为什么静态方法不可测试?

为什么静态方法不可测试?请举例说明(如果可能,请使用PHP).

php static-methods unit-testing

13
推荐指数
1
解决办法
1768
查看次数

如何避免使用PHP全局对象?

我目前正在创建博客系统,我希望将来可以变成一个完整的CMS.

有两个类/对象可用于全局访问(mysqli数据库连接和一个用于检查用户是否已登录的自定义类).

我正在寻找一种不使用全局对象的方法,如果可能的话,每次调用时都不会将对象传递给每个函数.

php global

6
推荐指数
2
解决办法
9368
查看次数

在PHP中的函数之间共享变量而不使用全局变量

我有一个与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)

php oop global

5
推荐指数
2
解决办法
5696
查看次数

何时需要使用静态方法?

我认为通常我们使用静态方法,因为我们不需要实例化对象.我们可以className::staticFunction用来调用静态方法,今天发现bub:

test1.php

<?php
class Foo { 
    static public function helloWorld() {
        print "Hello world " ;
    }
}
Foo::helloWorld();
Run Code Online (Sandbox Code Playgroud)

test2.php

<?php
class Foo { 
    public function helloWorld() {
        print "Hello world " ;
    }
}
Foo::helloWorld();
Run Code Online (Sandbox Code Playgroud)

题:

以上两个脚本都有效.我们没有声明函数static,我们仍然可以className::staticFunction用来调用函数.为什么我们需要使用静态方法?

php

4
推荐指数
1
解决办法
670
查看次数

在PHP中何时使用::以及何时使用 - >

如果这对于经验丰富的PHP用户来说显而易见,我深表歉意,但是,我相信我错过了我学习历程中的一个重要障碍.使用对象时,我现在如何通过 - >调用该函数或使用::调用它.目前我只使用了 - >方法,但是我遇到了使用::方法的代码.非常感谢任何见解或解释!

php function object

2
推荐指数
1
解决办法
380
查看次数

php 中的公共静态和公共函数有什么区别?

我知道根据this有很多信息,但我找不到任何真正有用和可以理解的信息。那么public static function和之间有什么区别public function?为什么有时我必须使用这个词static

我知道静态函数由::和非静态函数调用->,但真正的区别(为什么有时我应该使用static我不明白)。据我所知,当我使用 时static,我可以从另一个类调用它。没有它 - 我不能。但我很确定我错了。

我认为这些信息对很多人真的很有帮助。感谢您花时间尝试解释它。

php

-2
推荐指数
1
解决办法
8718
查看次数