相关疑难解决方法(0)

单身人士有什么不好的?

单例模式是一个缴足成员四人帮模式书,但最近似乎而是由开发者世界孤立.我仍然使用相当多的单例,特别是对于工厂类,虽然你必须对多线程问题(实际上是任何类)有点小心,但我不明白为什么它们如此可怕.

Stack Overflow特别假设每个人都同意Singletons是邪恶的.为什么?

请用" 事实,参考或特定专业知识 " 支持您的答案

singleton design-patterns

1931
推荐指数
30
解决办法
48万
查看次数

PHP5:const vs static

在PHP5中,使用const和有static什么区别?什么时候适合?和什么样的作用呢public,protectedprivate游戏-如果有的话.

php class-design constants object static-members

163
推荐指数
4
解决办法
8万
查看次数

在PHP中是否有用于数据库访问的单例的用例?

我通过PDO访问我的MySQL数据库.我正在设置对数据库的访问权限,我的第一次尝试是使用以下内容:

我想到的第一件事是global:

$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'root', 'pwd');

function some_function() {
    global $db;
    $db->query('...');
}
Run Code Online (Sandbox Code Playgroud)

这被认为是一种不好的做法.一点点搜索后,我结束了与Singleton模式,其

"适用于需要单个类实例的情况."

根据手册中的示例,我们应该这样做:

class Database {
    private static $instance, $db;

    private function __construct(){}

    static function singleton() {
        if(!isset(self::$instance))
            self::$instance = new __CLASS__;

        return self:$instance;
    }

    function get() {
        if(!isset(self::$db))
            self::$db = new PDO('mysql:host=127.0.0.1;dbname=toto', 'user', 'pwd')

        return self::$db;
    }
}

function some_function() {
    $db = Database::singleton();
    $db->get()->query('...');
}

some_function();
Run Code Online (Sandbox Code Playgroud)

当我能做到这一点时,为什么我需要相对较大的课程呢?

class Database {
    private static $db;

    private function __construct(){}

    static function get() …
Run Code Online (Sandbox Code Playgroud)

php oop singleton design-patterns

136
推荐指数
7
解决办法
4万
查看次数

如何在PHP中定义全局函数

如何定义可从任何页面访问的全局函数?

php global function

37
推荐指数
3
解决办法
6万
查看次数

PHP单例类的最佳实践

可能重复:
谁需要单身人士?

我总是写最佳实践,但我也想了解为什么给定的东西是最佳实践.

我读过一篇文章(遗憾的是我不记得),单例类更喜欢被实例化,而不是用静态函数创建并使用范围解析运算符(::)进行访问.因此,如果我有一个包含所有要验证的工具的类,简而言之:

class validate {
    private function __construct(){}
    public static function email($input){
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

我被告知这被认为是不好的做法(或者至少被警告过),因为有垃圾收集器和维护这样的东西.所以对"单体类作为静态方法"的批评是什么,我实例化一个类我100%肯定我只会实例化一次.对我来说,它似乎在做"双重工作",因为它已经准备好了.我错过了什么?

对此事有何看法?当然,这不是生死攸关的问题,但如果有选择的话,人们也可以做正确的事情:)

php oop singleton design-patterns class

23
推荐指数
2
解决办法
7万
查看次数

在使用数据库的每个函数中是否需要php mysql连接?

我正在创建一个php restful API,目前我在每个函数中都有数据库连接信息.

//Connect To Database
    $hostname=host;
    $username=username;
    $password=password;
    $dbname=dbname;

    mysql_connect($hostname, $username, $password) OR DIE('Unable to connect to database! Please try again later.');
    mysql_select_db($dbname);
mysql_query($sqlApiAccess) or die('Error, insert query failed');
Run Code Online (Sandbox Code Playgroud)

这样做的最佳方法是什么,每个php文件可以有一个数据库连接吗?或者我是否需要按使用数据库的功能执行此操作.

php mysql

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

在静态函数中访问公共/私有函数?

由于您无法在静态函数中使用$ this->,您应该如何访问静态函数中的常规函数​​?

private function hey()
{
    return 'hello';
}

public final static function get()
{
    return $this->hey();
}
Run Code Online (Sandbox Code Playgroud)

这会引发错误,因为你不能在静态内使用$ this->.

private function hey()
{
    return 'hello';
}

public final static function get()
{
    return self::hey();
}
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

Non-static method Vote::get() should not be called statically
Run Code Online (Sandbox Code Playgroud)

如何在静态方法中访问常规方法?在同一个班*

php oop methods

4
推荐指数
2
解决办法
7333
查看次数

使用PHP在整个站点中使用对象的实例

我如何使用最初在整个站点中加载的对象实例?

我希望$ myinstance可以在任何地方使用.

$myinstance = new TestClass();
Run Code Online (Sandbox Code Playgroud)

谢谢!

php class object instance

3
推荐指数
1
解决办法
3260
查看次数

PHP:正确使用单例模式?

我正在尝试学习PHP OOP,并对如何在我的项目中使用全局数据库类进行了一些研究.从我所看到的,最合适的模式是一个单例,它可以确保始终只存在一个数据库连接.然而,由于这是我第一次使用Singleton模式,我不确定我是否做得对.

这是一个合适的单身人士吗?此代码是否仅确保一个数据库连接?有什么办法可以测试吗?(学会钓鱼的人,他将在余生中获得食物......)

我使用redbean作为我的ORM,这是我如何明确地设置它:

require_once PLUGINPATH.'rb.php';
$redbean= R::setup("mysql:host=192.168.1.1;dbname=myDatabase",'username','password');
Run Code Online (Sandbox Code Playgroud)

我已经基于这个源创建了以下脚本,作为我自己的单例数据库类;

class database {
    private $connection = null;

    private function __construct(){
        require_once PLUGINPATH.'rb.php';
        $this->connection = R::setup("mysql:host=192.168.1.1;dbname=myDatabase",'username','password');
    }

    public static function get() {
        static $db = null;

        if ( $db === null )
        $db = new database();

        return $db;
    }

    public function connection() {
        return $this->connection;
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

php oop singleton design-patterns

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

一个类只有一个实例

我想知道如何获得以下数据库连接的一个实例。

例如,假设这是我在文件 Database.php 中的类

public class Database {
    public function __construct() {
      try {
            // PDO Here
            print("Connected!");
        } catch (PDOException $e) {
            die($e->getMessage());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

索引.php

Database();
Database();
Run Code Online (Sandbox Code Playgroud)

结果

Connected!Connected!

即使我调用它两次,我也只想实例化该类一次。

php oop

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