(C#과 같이) PHP로 스태틱클래스를 만들 수 있습니까?
PHP에서 스태틱클래스를 만들고 C#에서와 같이 동작시키고 싶기 때문에
- 생성자는 클래스에 대한 첫 번째 호출 시 자동으로 호출됩니다.
- 인스턴스화 불필요
이런 종류의...
static class Hello {
private static $greeting = 'Hello';
private __construct() {
$greeting .= ' There!';
}
public static greet(){
echo $greeting;
}
}
Hello::greet(); // Hello There!
할 수 (PHP를 호출하려고 으로 호출되지 않습니다).self::__construct()
에러가 발생합니다).
「이러다」를 .initialize()
합니다.
<?php
class Hello
{
private static $greeting = 'Hello';
private static $initialized = false;
private static function initialize()
{
if (self::$initialized)
return;
self::$greeting .= ' There!';
self::$initialized = true;
}
public static function greet()
{
self::initialize();
echo self::$greeting;
}
}
Hello::greet(); // Hello There!
?>
그렉의 대답 외에 컨스트럭터를 비공개로 설정하여 클래스를 인스턴스화할 수 없도록 하는 것이 좋습니다.
그래서 제 소견으로는 이것은 그렉의 사례를 바탕으로 한 보다 완벽한 예입니다.
<?php
class Hello
{
/**
* Construct won't be called inside this class and is uncallable from
* the outside. This prevents instantiating this class.
* This is by purpose, because we want a static class.
*/
private function __construct() {}
private static $greeting = 'Hello';
private static $initialized = false;
private static function initialize()
{
if (self::$initialized)
return;
self::$greeting .= ' There!';
self::$initialized = true;
}
public static function greet()
{
self::initialize();
echo self::$greeting;
}
}
Hello::greet(); // Hello There!
?>
정적인 수업을 들을 수 있어요.하지만 정말 중요한 것이 없는 것 같습니다.php에서는 앱 사이클이 없기 때문에 어플리케이션 전체에 실제 스태틱(또는 싱글톤)이 발생하지 않습니다.
final Class B{
static $staticVar;
static function getA(){
self::$staticVar = New A;
}
}
b의 구조는 singeton 핸들러를 호출하는 것입니다. 당신은 또한 그것을 할 수 있습니다.
Class a{
static $instance;
static function getA(...){
if(!isset(self::$staticVar)){
self::$staticVar = New A(...);
}
return self::$staticVar;
}
}
용법입니다.$a = a::getA(...);
일반적으로 일반 비 스태틱클래스를 작성하고 팩토리 클래스를 사용하여 객체의 단일 인스턴스(sudo static)를 인스턴스화하는 것을 선호합니다.
이 방법으로 컨스트럭터와 디스트럭터는 정상적으로 동작하며 필요에 따라 비 스태틱인스턴스를 추가할 수 있습니다(예를 들어 두 번째 DB 연결).
이 기능은 항상 사용하며, 페이지가 종료되면 소멸자가 세션을 데이터베이스로 푸시하기 때문에 커스텀 DB 스토어 세션핸들러를 작성할 때 특히 유용합니다.
또 다른 장점은 모든 것이 온 디맨드로 설정되기 때문에 호출 순서를 무시할 수 있다는 것입니다.
class Factory {
static function &getDB ($construct_params = null)
{
static $instance;
if( ! is_object($instance) )
{
include_once("clsDB.php");
$instance = new clsDB($construct_params); // constructor will be called
}
return $instance;
}
}
DB 클래스...
class clsDB {
$regular_public_variables = "whatever";
function __construct($construct_params) {...}
function __destruct() {...}
function getvar() { return $this->regular_public_variables; }
}
아무데서나 쓰고 싶으면 전화...
$static_instance = &Factory::getDB($somekickoff);
그 후 모든 메서드를 비 스태틱으로 취급합니다(이러한 메서드는 비 스태틱이기 때문입니다).
echo $static_instance->getvar();
개체를 정적으로 정의할 수는 없지만 이 작업은 작동합니다.
final Class B{
static $var;
static function init(){
self::$var = new A();
}
B::init();
언급URL : https://stackoverflow.com/questions/468642/is-it-possible-to-create-static-classes-in-php-like-in-c
'programing' 카테고리의 다른 글
부동 값에 접미사 'f'를 사용하는 이유는 무엇입니까? (0) | 2022.10.19 |
---|---|
함수가 발신자가 인식하는 일부 인수를 변경할 수 있지만 다른 인수는 변경할 수 없는 이유는 무엇입니까? (0) | 2022.10.19 |
Python을 사용하여 Selenium에서 드롭다운 메뉴 값을 선택하는 방법은 무엇입니까? (0) | 2022.10.19 |
사전에서 반복하는 동안 사전에서 항목을 삭제하려면 어떻게 해야 합니까? (0) | 2022.10.19 |
버튼을 사용하여 페이지를 다른 페이지로 리디렉션하려면 어떻게 해야 합니까? (0) | 2022.10.19 |