2014-07-10 1 views
1

C에서 정의 된 PHP 클래스를 포함하는 PHP 확장을 C에서 작성 중입니다. 클래스 중 하나에서 정적 속성을 설정하고 싶습니다. 특히, 나는 C의 값이 객체가 될 필요가 있기 때문에 나는이 작업을 수행 할 REGISTER_*_CONSTANT 매크로를 사용할 수 없습니다PHP 확장 클래스에서 정적 클래스 속성을 설정하는 방법은 무엇입니까?

class Example{ 
    public static $member; 
} 

Example::member = new Example(); 

에 해당하는 작업을 수행하고 싶습니다. 공식 문서를 확인했지만 클래스에 관한 섹션은 비어 있습니다.

답변

1

실제로 정적 속성을 등록 할 수는 없지만 PHP를 등록해야합니다. 내 특정 경우

// int zend_update_static_property   (zend_class_entry* $scope, char* $name, int $name_length, zval* $value,  magic $TSRMLS_DC) 
int prop_set = zend_update_static_property (my_example_class_entry, "member", 7,    my_instance   TSRMLS_CC); 
+0

이 올바른 기능과 같은 같은 기능을 작성하여 전 세계적으로 내 헤더 파일에 zval *php_example_static_member을 선언함으로써, 내 example_methods 배열의 라인

PHP_ME(Example, member, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) 

을 넣어 이런 짓을,하지만 난 ' 'PHP_MINIT_FUNCTION'에서 호출하고 싶기 때문에 내가 원하는 것을 수행하는 데 어려움을 겪고 있지만, 뭔가 (아마'executor_globals')가 아직 그 시간까지 초기화되지 않은 것처럼 보입니다. – murgatroid99

1

http://php.undmedlibrary.org/manual/en/zend-api.zend-update-static-property.php

, 내 클래스는 C 구조체를 포장, 그래서 모듈 초기화시를 초기화 할 수 분명히 드릴 수 없습니다. 정적으로 선언 된 인스턴스를 반환하는 정적 메서드를 선언하는 다음 최선의 옵션을 선택했습니다. 나는, 그리고

PHP_METHOD(Example, member){ 
    if(php_example_static_member == NULL){ 
    php_example_static_member = create_example_instance(); //However the new instance is created 
    } 
    RETURN_ZVAL(php_example_static_member, false, false); 
} 
관련 문제