[Php 5> = 5.3.2, Php 7, Php 8]
ReflectionMethod :: SetAccessible - Đặt khả năng truy cập phương thức — Set method accessibility
Sự mô tả
PublicReflectionMethod :: SetAccessible [Bool $accessible
]: Void ReflectionMethod::setAccessible[bool $accessible
]: void
Lưu ý: Kể từ Php 8.1.0, gọi phương thức này không có hiệu lực; Tất cả các phương thức được mời theo mặc định.: As of PHP 8.1.0, calling this method has no effect; all methods are invokable by default.
Thông số
accessible
true
để cho phép khả năng tiếp cận, hoặc false
. to allow accessibility, or false
.
Trả về giá trị
Không có giá trị được trả về.
Ví dụ
Ví dụ #1 Định nghĩa lớp đơn giản
Ví dụ trên sẽ xuất ra một cái gì đó tương tự như:
bar Fatal error: Uncaught Error: Call to private method MyClass::foo[] from global scope in /in/qdaZS:16
Xem thêm
- RefrectionMethod :: isprivate [] - Kiểm tra xem phương thức có riêng tư không
- RefrectionMethod :: isProtected [] - Kiểm tra xem phương thức có được bảo vệ không
Dave1010 tại Gmail Dot Com ¶ ¶
11 năm trước
class Console
{
final public static function run[] {
while [TRUE != FALSE] {
echo "\n> ";
$command = trim[fgets[STDIN]];
switch [$command] {
case 'exit':
case 'q':
case 'quit':
echo "OK+\n";
return;
default:
ob_start[];
eval[$command];
$out = ob_get_contents[];
ob_end_clean[];
print["Command: $command"];
print["Output:\n$out"];
break;
}
}
}
}
0class Console
{
final public static function run[] {
while [TRUE != FALSE] {
echo "\n> ";
$command = trim[fgets[STDIN]];
switch [$command] {
case 'exit':
case 'q':
case 'quit':
echo "OK+\n";
return;
default:
ob_start[];
eval[$command];
$out = ob_get_contents[];
ob_end_clean[];
print["Command: $command"];
print["Output:\n$out"];
break;
}
}
}
}
1class Console
{
final public static function run[] {
while [TRUE != FALSE] {
echo "\n> ";
$command = trim[fgets[STDIN]];
switch [$command] {
case 'exit':
case 'q':
case 'quit':
echo "OK+\n";
return;
default:
ob_start[];
eval[$command];
$out = ob_get_contents[];
ob_end_clean[];
print["Command: $command"];
print["Output:\n$out"];
break;
}
}
}
}
2class Console
{
final public static function run[] {
while [TRUE != FALSE] {
echo "\n> ";
$command = trim[fgets[STDIN]];
switch [$command] {
case 'exit':
case 'q':
case 'quit':
echo "OK+\n";
return;
default:
ob_start[];
eval[$command];
$out = ob_get_contents[];
ob_end_clean[];
print["Command: $command"];
print["Output:\n$out"];
break;
}
}
}
}
3Tôi muốn truy cập các phương thức và biến riêng tư từ bên ngoài các lớp trong các trường hợp cụ thể rất hiếm.
Tôi đã thấy rằng điều này là không thể mặc dù nội tâm được sử dụng.
Trường hợp cụ thể là trường hợp tiếp theo:
Tôi muốn có một cái gì đó như thế này:
class Console
{
final public static function run[] {
while [TRUE != FALSE] {
echo "\n> ";
$command = trim[fgets[STDIN]];
switch [$command] {
case 'exit':
case 'q':
case 'quit':
echo "OK+\n";
return;
default:
ob_start[];
eval[$command];
$out = ob_get_contents[];
ob_end_clean[];
print["Command: $command"];
print["Output:\n$out"];
break;
}
}
}
}
Phương pháp này sẽ có thể được tiêm vào mã như thế này:
Class Demo
{
private $a;
final public function myMethod[]
{
// some code
Console::run[];
// some other code
}
final public function myPublicMethod[]
{
return "I can run through eval[]";
}
private function myPrivateMethod[]
{
return "I cannot run through eval[]";
}
}
[Đây chỉ là một đơn giản hóa.
Vì thế...
Nếu bạn khởi tạo bản demo lớp và bạn gọi $ demo-> myMethod [], bạn sẽ nhận được một bảng điều khiển: Bảng điều khiển đó có thể truy cập phương thức đầu tiên viết lệnh như:
> $this->myPublicMethod[];
Nhưng bạn không thể chạy thành công cái thứ hai:
> $this->myPrivateMethod[];
Có ai trong số các bạn có bất kỳ ý tưởng nào, hoặc nếu có bất kỳ thư viện nào cho PHP cho phép bạn làm điều này?
Cảm ơn rất nhiều!