Одиночная тонна - это статическая функция, которая позволяет вам отслеживать экземпляры вашего объекта, когда вы используете одноэлементный экземпляр, вы создаете экземпляр объекта, но экземпляры всегда остаются со связанным объектом.
Возьмите этот пример:
$db1 = new Database();
$db2 = new Database();
Как вы можете видеть, db1
и db2
- это 2 новых экземпляра базы данных, поэтому там не то же самое, теперь возьмем этот пример.
$db1 = Database::Instance();
$db2 = Database::Instance();
и код для экземпляра
class Database
{
private static $_instance;
public static Instance()
{
if(self::$_instance !== null)
{
//We have already stored the object locally so just return it.
//This is how the object always stays the same
return self::$_instance;
}
return self::$_instance = new Database(); //Set the instance.
}
}
Если вы проанализируете код, то сделаете так, чтобы независимо от того, где вы используете Instance во всем приложении, ваш объект всегда будет одинаковым.
статическая функция - это метод внутри класса / объекта, это тип метода, который можно использовать без инициализации объекта.
Что касается метода __callStatic, то это магический метод, который выполняется там, где статический метод недоступен.
Например:
class Database
{
public static function first()
{
echo 'I actually exists and I am first';
}
public function __callStatic($name,$args)
{
echo 'I am '. $name .' and I was called with ' . count($args) . ' args';
}
}
давайте проверим их.
Database::first(); //Output: I actually exists and I am first
Database::second(); //Output: I am second and I was called with 0 args
Database::StackOverflow(true,false); //Output: I am StackOverflow and I was called with 2 args
Надеюсь, это поможет вам