Tôi đang sử dụng php 5.2.6. Tôi có một mô hình chiến lược, và các chiến lược có một phương pháp tĩnh. Trong lớp thực sự thực hiện một trong các chiến lược, nó nhận được tên của lớp chiến lược để khởi tạo. Tuy nhiên, tôi muốn gọi một trong các phương pháp tĩnh trước khi khởi tạo, như sau:Không thể gọi phương thức tĩnh từ lớp là tên biến?
$strNameOfStrategyClass::staticMethod();
nhưng nó cung cấp T_PAAMAYIM_NEKUDOTAYIM
.
$> cat test.php
<?
interface strategyInterface {
public function execute();
public function getLog();
public static function getFormatString();
}
class strategyA implements strategyInterface {
public function execute() {}
public function getLog() {}
public static function getFormatString() {}
}
class strategyB implements strategyInterface {
public function execute() {}
public function getLog() {}
public static function getFormatString() {}
}
class implementation {
public function __construct(strategyInterface $strategy) {
$strFormat = $strategy::getFormatString();
}
}
$objImplementation = & new implementation("strategyB") ;
$> php test.php
Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /var/www/test.php on line 24
$> php -v
PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug 4 2010 03:25:57)
Điều này có hoạt động trong 5.3 không?
1 cho làm thế nào để Xử lý vấn đề loại gợi ý –
Có một fart não ngày hôm nay: PI không muốn truyền một đối tượng instantiated đến lớp thực hiện, vì tôi muốn khởi tạo nó xuống dòng, sau khi lớp thực hiện đã tạo ra một số dữ liệu mà tầng egy cần. Tôi sẽ nghĩ rằng tôi sẽ cần 'call_user_func_array()' anyway - cảm ơn cho mã tuyệt vời! – user151841
Lưu ý rằng loại tác phẩm này chỉ trong 5.3. Bạn có thể làm "$ foo :: staticMethod()" nhưng bạn không thể làm "$ this-> foo = new Whatever(); $ this-> foo :: staticMethod()". –