Tôi đang cố gắng truy cập một phương thức tĩnh, nhưng sử dụng một biến làm tên lớp. Điều này có thể? Tôi dường như đang có vấn đề với nó. Tôi muốn có thể làm điều gì đó như thế này:
class foo {
public static function bar[] {
echo 'test';
}
}
$variable_class_name = 'foo';
$variable_class_name::bar[];
Và tôi cũng muốn có thể thực hiện tương tự bằng cách sử dụng các biến tĩnh.
hỏi ngày 20 tháng 2 năm 2011 lúc 20:59Feb 20, 2011 at 20:59
dqhendricksdqhendricksdqhendricks
18.9k10 Huy hiệu vàng48 Huy hiệu bạc82 Huy hiệu đồng10 gold badges48 silver badges82 bronze badges
4
Cú pháp đó chỉ được hỗ trợ trong PHP 5.3 trở lên. Các phiên bản trước không hiểu cú pháp đó, do đó lỗi phân tích cú pháp của bạn [T_PAAMAYIM_NEKUDOTAYIM
đề cập đến toán tử ::
].
Trong các phiên bản trước, bạn có thể thử call_user_func[]
, chuyển nó một mảng chứa tên lớp và tên phương thức của nó:
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
Đã trả lời ngày 20 tháng 2 năm 2011 lúc 21:08Feb 20, 2011 at 21:08
BoltclockboltclockBoltClock
679K156 Huy hiệu vàng1365 Huy hiệu bạc1338 Huy hiệu đồng156 gold badges1365 silver badges1338 bronze badges
3
Bạn có thể sử dụng phản xạ cho PHP 5.1 trở lên:
class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
Đã trả lời ngày 20 tháng 2 năm 2011 lúc 22:14Feb 20, 2011 at 22:14
David Harknessdavid HarknessDavid Harkness
35K10 Huy hiệu vàng111 Huy hiệu bạc129 Huy hiệu đồng10 gold badges111 silver badges129 bronze badges
0
Mẹo
Trang này mô tả việc sử dụng từ khóa static
để xác định các phương thức và thuộc tính tĩnh. static
cũng có thể được sử dụng để xác định các biến tĩnh và cho các ràng buộc tĩnh muộn. Vui lòng tham khảo các trang đó để biết thông tin về những ý nghĩa của static
.
Khai báo các thuộc tính hoặc phương thức lớp là tĩnh giúp chúng có thể truy cập mà không cần khởi tạo lớp. Chúng cũng có thể được truy cập thống kê trong một đối tượng lớp khởi tạo.
Phương pháp tĩnh
Bởi vì các phương thức tĩnh có thể gọi được mà không có một thể hiện của đối tượng được tạo ra, nên việc biến giả $ này không có sẵn bên trong các phương thức được khai báo là tĩnh.
Cảnh báo
Gọi các phương thức phi tĩnh là ném một lỗi.Error.
Trước PHP 8.0.0, việc gọi các phương thức phi tĩnh được tính không thể dùng được và tạo ra cảnh báo ____10.
0 warning. $variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
Ví dụ #1 Phương pháp tĩnh ví dụ
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
1
Tính chất tĩnh
Các thuộc tính tĩnh được truy cập bằng toán tử phân giải phạm vi [::
] và không thể được truy cập thông qua toán tử đối tượng [
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
3].Có thể tham chiếu lớp bằng một biến. Giá trị của biến không thể là một từ khóa [ví dụ:
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
4, $variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
5 và static
].Ví dụ #2 ví dụ thuộc tính tĩnh
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
7$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
8$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
9Đầu ra của ví dụ trên trong Php 8 tương tự như:
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo
Inkredredibl ¶ ¶
14 năm trước
class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
0payal001 tại gmail dot com ¶
11 năm trước
class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
1class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
2class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
3class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
4artekpuck tại gmail dot com ¶
4 năm trước
class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
5Quản trị viên tại Shopinson Dot Com ¶ ¶
2 năm trước
class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
6class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
7class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
8class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
9Ẩn danh ¶ ¶
17 năm trước
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo0
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo1
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo2
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo3
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo4
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo5
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo6
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo7
Ẩn danh ¶ ¶
17 năm trước
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo8
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo9
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo7
9 năm trước ¶
4 năm trước
T_PAAMAYIM_NEKUDOTAYIM
1
T_PAAMAYIM_NEKUDOTAYIM
2
T_PAAMAYIM_NEKUDOTAYIM
3
T_PAAMAYIM_NEKUDOTAYIM
4
class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
8T_PAAMAYIM_NEKUDOTAYIM
6Quản trị viên tại Shopinson Dot Com ¶ ¶
2 năm trước
T_PAAMAYIM_NEKUDOTAYIM
7
T_PAAMAYIM_NEKUDOTAYIM
8
T_PAAMAYIM_NEKUDOTAYIM
9
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo7
Ẩn danh ¶ ¶
17 năm trước
::
1
::
2
::
3
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo7
9 năm trước ¶
Aschmidt tại Anamera Dot Net
::
5
::
6
::
7
::
8Rahul dot anand77 tại gmail dot com ¶ ¶
11 năm trước
::
9
call_user_func[]
0
call_user_func[]
1
call_user_func[]
2artekpuck tại gmail dot com ¶
4 năm trước
call_user_func[]
3
call_user_func[]
4
call_user_func[]
5
call_user_func[]
6Quản trị viên tại Shopinson Dot Com ¶ ¶
2 năm trước
call_user_func[]
7
call_user_func[]
8
call_user_func[]
9
static
0
static
1
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo7
Ẩn danh ¶ ¶
14 năm trước
static
3
static
4
static
5
static
6
static
7
static
8
static
9
static
0
static
1
static
2
static
3
static
4
foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo7
payal001 tại gmail dot com ¶
2 năm trước
static
6
class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
8static
8Ẩn danh ¶ ¶
14 năm trước
static
9
static
0
static
1
static
2payal001 tại gmail dot com ¶
11 năm trước
static
3
static
4
static
5artekpuck tại gmail dot com ¶
17 năm trước
static
6
static
7
class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
8static
99 năm trước ¶
4 năm trước
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
00$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
01static
4
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
03Quản trị viên tại Shopinson Dot Com ¶ ¶
4 năm trước
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
04$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
05$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
06$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
07class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
8$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
09Quản trị viên tại Shopinson Dot Com ¶ ¶
4 năm trước
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
10$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
11$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
12$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
13Quản trị viên tại Shopinson Dot Com ¶ ¶
2 năm trước
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
14$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
15$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
16$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
17Ẩn danh ¶ ¶
17 năm trước
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
18$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
19class foo {
public static $bar = 'foobar';
}
$class = 'foo';
$reflector = new ReflectionClass[$class];
echo $reflector->getStaticPropertyValue['bar'];
> foobar
8$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
219 năm trước ¶
14 năm trước
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
22payal001 tại gmail dot com ¶
14 năm trước
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
23$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
12$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
25payal001 tại gmail dot com ¶
2 năm trước
$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
26$variable_class_name = 'foo';
call_user_func[array[$variable_class_name, 'bar']];
27foo foo Notice: Accessing static property Foo::$my_static as non static in /in/V0Rvv on line 23 Warning: Undefined property: Foo::$my_static in /in/V0Rvv on line 23 foo foo foo foo7