Chức năng bên trong một hàm hoặc được gọi là các hàm lồng nhau rất có thể sử dụng nếu bạn cần thực hiện một số quy trình đệ quy như lặp nhiều lớp thực sự hoặc cây tệp mà không có nhiều vòng hoặc đôi khi tôi sử dụng nó để tránh tạo các lớp cho các công việc nhỏ yêu cầu phân chia và cách ly chức năng giữa nhiều chức năng. Nhưng trước khi bạn đi cho các chức năng lồng nhau, bạn phải hiểu điều đó or so called nested functions are very usable if you need to do some recursion processes such as looping true multiple layer of array or a file tree without multiple loops or sometimes i use it to avoid creating classes for small jobs which require dividing and isolating functionality among multiple functions. but before you go for nested functions you have to understand that
- Chức năng con sẽ không khả dụng trừ khi chức năng chính được thực thi
- Khi chức năng chính được thực thi, các chức năng con sẽ có sẵn trên toàn cầu để truy cập
- Nếu bạn cần gọi chức năng chính hai lần, nó sẽ cố gắng xác định lại hàm con và điều này sẽ gây ra lỗi nghiêm trọng
Vì vậy, điều này có nghĩa là bạn không thể sử dụng các chức năng lồng nhau? Không, bạn có thể với các cách giải quyết dưới đây
Phương pháp đầu tiên là chặn chức năng con được khai báo lại vào ngăn xếp chức năng toàn cầu bằng cách sử dụng khối có điều kiện tồn tại chức năng, điều này sẽ ngăn chặn chức năng được khai báo nhiều lần vào ngăn xếp chức năng toàn cầu.
function myfunc[$a,$b=5]{
if[!function_exists["child"]]{
function child[$x,$c]{
return $c+$x;
}
}
try{
return child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
//once you have invoke the main function you will be able to call the child function
echo myfunc[10,20]+child[10,10];
và phương pháp thứ hai sẽ giới hạn phạm vi chức năng của trẻ đến cục bộ thay vì toàn cầu, để làm điều đó bạn phải xác định hàm là hàm ẩn danh và gán nó cho một biến cục bộ, thì hàm sẽ chỉ có sẵn trong phạm vi cục bộ và sẽ được khai báo và gọi mỗi khi bạn gọi chức năng chính.Anonymous function and assign it to a local variable, then the function will only be available in local scope and will re declared and invokes every time you call the main function.
function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
Hãy nhớ rằng đứa trẻ sẽ không có sẵn bên ngoài chức năng chính hoặc ngăn xếp chức năng toàn cầu
Tôi có thể tạo một hàm bên trong một hàm PHP không?
Lưu ý rằng PHP không thực sự hỗ trợ "các chức năng lồng nhau", như chỉ được xác định trong phạm vi của hàm cha. Tất cả các chức năng được xác định trên toàn cầu. — Create a function dynamically by evaluating a string of code
Làm thế nào chúng ta có thể tạo một chức năng trong PHP?
Trong PHP, tên hàm là bất kỳ tên nào kết thúc trong dấu ngoặc đơn mở và đóng. Hàm từ khóa thường được sử dụng để bắt đầu một tên hàm. Để gọi một chức năng, chỉ cần nhập tên của nó theo sau là dấu ngoặc đơn. Một số không thể là ký tự đầu tiên trong một tên tính năng.
PHP có hỗ trợ các chức năng lồng nhau không?
Các chức năng lồng nhau [AKA: Các hàm bên trong các hàm] có thể có trong PHP và đôi khi được sử dụng dưới dạng các hàm ẩn danh. Cũng có thể tạo các chức năng được đặt tên bên trong các chức năng khác, giống như bạn làm trong PHP thủ tục; Nhưng tôi sẽ không đề nghị điều này.[string $args
, string $code
]: string
[Php 4> = 4.0.1, Php 5, Php 7]
created_function - Tạo một hàm động bằng cách đánh giá một chuỗi mãeval[] and as such has the same security issues as eval[]. It also has bad performance and memory usage characteristics, because the created functions are global and can not be freed.
Cảnh báo
Chức năng này đã được không dùng nữa kể từ Php 7.2.0 và được loại bỏ kể từ Php 8.0.0. Dựa vào chức năng này là rất nản lòng.
Sự mô tả
created_function [Chuỗi$args
, chuỗi $code
]: ChuỗiThận trọng
Hàm này thực hiện một eval [] và do đó có các vấn đề bảo mật tương tự như eval []. Nó cũng có hiệu suất xấu và đặc điểm sử dụng bộ nhớ, bởi vì các chức năng được tạo là toàn cầu và không thể được giải phóng.Thay vào đó, một hàm ẩn danh bản địa nên được sử dụng.
Thông số
Thông thường nên vượt qua các tham số này như các chuỗi được trích dẫn đơn. Nếu sử dụng các chuỗi được trích dẫn kép, các tên biến trong mã cần được thoát cẩn thận, ví dụ: ________số 8.
1 on failure. Note that the name contains a non-printable character [function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
2], so care should be taken when printing the name or incorporating it in any other string. args
Các đối số chức năng, như một chuỗi được phân tách bằng dấu phẩy.create_function[] or anonymous functions
function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
0create_function[]: function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
3Mã chức năng.
function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
4Trả về giá trị
ln[2] + ln[2.718281828459] = 1.6931471805599
Trả về một tên hàm duy nhất dưới dạng chuỗi hoặc
1 khi thất bại. Lưu ý rằng tên chứa một ký tự không thể in [function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
2], vì vậy nên cẩn thận khi in tên hoặc kết hợp nó trong bất kỳ chuỗi nào khác.create_function[] or anonymous functions function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
Ví dụ
function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
5function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
6function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
7Ví dụ #1 Tạo hàm động, với các hàm created_function [] hoặc ẩn danh
function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
8function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
6ln[2] + ln[2.718281828459] = 1.69314718055990
Trả về giá trị
Using the first array of dynamic functions parameters: 2.3445, M_PI some trig: -1.6291725057799 a hypotenuse: 3.9199852871011 b*a^2 = 4.8103313314525 min[b^2+a, a^2,b] = 8.6382729035898 ln[a]/b = 0.27122299212594 Using the second array of dynamic functions ** "Twas the night" and "Twas brilling and the slithy toves" ** Look the same to me! [looking at the first 3 chars] CRCs: 3569586014, 342550513 similar[a,b] = 11[45.833333333333%]
Trả về một tên hàm duy nhất dưới dạng chuỗi hoặc
1 khi thất bại. Lưu ý rằng tên chứa một ký tự không thể in [function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
2], vì vậy nên cẩn thận khi in tên hoặc kết hợp nó trong bất kỳ chuỗi nào khác.function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
Ví dụarray_walk[] or usort[].
ln[2] + ln[2.718281828459] = 1.69314718055991
ln[2] + ln[2.718281828459] = 1.69314718055992
Trả về giá trị
Array [ [0] => the mango [1] => a mango [2] => that mango [3] => this mango ]
Trả về một tên hàm duy nhất dưới dạng chuỗi hoặc
function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
1 khi thất bại. Lưu ý rằng tên chứa một ký tự không thể in [function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
2], vì vậy nên cẩn thận khi in tên hoặc kết hợp nó trong bất kỳ chuỗi nào khác.create_function[]: ln[2] + ln[2.718281828459] = 1.69314718055993
ln[2] + ln[2.718281828459] = 1.69314718055994
Trả về giá trị
Original: Array [ [0] => small [1] => a big string [2] => larger [3] => it is a string thing ] Sorted: Array [ [0] => it is a string thing [1] => a big string [2] => larger [3] => small ]
Trả về một tên hàm duy nhất dưới dạng chuỗi hoặc
1 khi thất bại. Lưu ý rằng tên chứa một ký tự không thể in [function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
2], vì vậy nên cẩn thận khi in tên hoặc kết hợp nó trong bất kỳ chuỗi nào khác. ¶function myfunc[$a,$b=5]{
$child = function [$x,$c]{
return $c+$x;
};
try{
return $child[$a,$b];
}catch[Exception $e]{
throw $e;
}
}
echo myfunc[10,20];
Ví dụ
ln[2] + ln[2.718281828459] = 1.69314718055995
Ví dụ #1 Tạo hàm động, với các hàm created_function [] hoặc ẩn danh ¶
15 năm trước
ln[2] + ln[2.718281828459] = 1.69314718055996
ln[2] + ln[2.718281828459] = 1.69314718055997
ln[2] + ln[2.718281828459] = 1.69314718055998
Phlyst ¶ ¶
15 năm trước
ln[2] + ln[2.718281828459] = 1.69314718055999
Using the first array of dynamic functions parameters: 2.3445, M_PI some trig: -1.6291725057799 a hypotenuse: 3.9199852871011 b*a^2 = 4.8103313314525 min[b^2+a, a^2,b] = 8.6382729035898 ln[a]/b = 0.27122299212594 Using the second array of dynamic functions ** "Twas the night" and "Twas brilling and the slithy toves" ** Look the same to me! [looking at the first 3 chars] CRCs: 3569586014, 342550513 similar[a,b] = 11[45.833333333333%]0
ln[2] + ln[2.718281828459] = 1.69314718055998
Phlyst ¶ ¶
16 năm trước
Using the first array of dynamic functions parameters: 2.3445, M_PI some trig: -1.6291725057799 a hypotenuse: 3.9199852871011 b*a^2 = 4.8103313314525 min[b^2+a, a^2,b] = 8.6382729035898 ln[a]/b = 0.27122299212594 Using the second array of dynamic functions ** "Twas the night" and "Twas brilling and the slithy toves" ** Look the same to me! [looking at the first 3 chars] CRCs: 3569586014, 342550513 similar[a,b] = 11[45.833333333333%]2
Using the first array of dynamic functions parameters: 2.3445, M_PI some trig: -1.6291725057799 a hypotenuse: 3.9199852871011 b*a^2 = 4.8103313314525 min[b^2+a, a^2,b] = 8.6382729035898 ln[a]/b = 0.27122299212594 Using the second array of dynamic functions ** "Twas the night" and "Twas brilling and the slithy toves" ** Look the same to me! [looking at the first 3 chars] CRCs: 3569586014, 342550513 similar[a,b] = 11[45.833333333333%]3
Using the first array of dynamic functions parameters: 2.3445, M_PI some trig: -1.6291725057799 a hypotenuse: 3.9199852871011 b*a^2 = 4.8103313314525 min[b^2+a, a^2,b] = 8.6382729035898 ln[a]/b = 0.27122299212594 Using the second array of dynamic functions ** "Twas the night" and "Twas brilling and the slithy toves" ** Look the same to me! [looking at the first 3 chars] CRCs: 3569586014, 342550513 similar[a,b] = 11[45.833333333333%]4
Using the first array of dynamic functions parameters: 2.3445, M_PI some trig: -1.6291725057799 a hypotenuse: 3.9199852871011 b*a^2 = 4.8103313314525 min[b^2+a, a^2,b] = 8.6382729035898 ln[a]/b = 0.27122299212594 Using the second array of dynamic functions ** "Twas the night" and "Twas brilling and the slithy toves" ** Look the same to me! [looking at the first 3 chars] CRCs: 3569586014, 342550513 similar[a,b] = 11[45.833333333333%]5
Kkaiser tại Revolution-Records Dot Net ¶
15 năm trước
Using the first array of dynamic functions parameters: 2.3445, M_PI some trig: -1.6291725057799 a hypotenuse: 3.9199852871011 b*a^2 = 4.8103313314525 min[b^2+a, a^2,b] = 8.6382729035898 ln[a]/b = 0.27122299212594 Using the second array of dynamic functions ** "Twas the night" and "Twas brilling and the slithy toves" ** Look the same to me! [looking at the first 3 chars] CRCs: 3569586014, 342550513 similar[a,b] = 11[45.833333333333%]6
Using the first array of dynamic functions parameters: 2.3445, M_PI some trig: -1.6291725057799 a hypotenuse: 3.9199852871011 b*a^2 = 4.8103313314525 min[b^2+a, a^2,b] = 8.6382729035898 ln[a]/b = 0.27122299212594 Using the second array of dynamic functions ** "Twas the night" and "Twas brilling and the slithy toves" ** Look the same to me! [looking at the first 3 chars] CRCs: 3569586014, 342550513 similar[a,b] = 11[45.833333333333%]7
Using the first array of dynamic functions parameters: 2.3445, M_PI some trig: -1.6291725057799 a hypotenuse: 3.9199852871011 b*a^2 = 4.8103313314525 min[b^2+a, a^2,b] = 8.6382729035898 ln[a]/b = 0.27122299212594 Using the second array of dynamic functions ** "Twas the night" and "Twas brilling and the slithy toves" ** Look the same to me! [looking at the first 3 chars] CRCs: 3569586014, 342550513 similar[a,b] = 11[45.833333333333%]8
Using the first array of dynamic functions parameters: 2.3445, M_PI some trig: -1.6291725057799 a hypotenuse: 3.9199852871011 b*a^2 = 4.8103313314525 min[b^2+a, a^2,b] = 8.6382729035898 ln[a]/b = 0.27122299212594 Using the second array of dynamic functions ** "Twas the night" and "Twas brilling and the slithy toves" ** Look the same to me! [looking at the first 3 chars] CRCs: 3569586014, 342550513 similar[a,b] = 11[45.833333333333%]9
Thông tin tại Adaniels Dot NL ¶ ¶
16 năm trước
Array [ [0] => the mango [1] => a mango [2] => that mango [3] => this mango ]0
Array [ [0] => the mango [1] => a mango [2] => that mango [3] => this mango ]1
ln[2] + ln[2.718281828459] = 1.69314718055998
Chắc chắn ¶ ¶
9 năm trước
Array [ [0] => the mango [1] => a mango [2] => that mango [3] => this mango ]3
Array [ [0] => the mango [1] => a mango [2] => that mango [3] => this mango ]4
ln[2] + ln[2.718281828459] = 1.69314718055998
Dave H ¶ ¶
11 năm trước
Array [ [0] => the mango [1] => a mango [2] => that mango [3] => this mango ]6
Array [ [0] => the mango [1] => a mango [2] => that mango [3] => this mango ]7
Array [ [0] => the mango [1] => a mango [2] => that mango [3] => this mango ]8
Array [ [0] => the mango [1] => a mango [2] => that mango [3] => this mango ]9
lombax85 tại gmail dot com ¶
1 năm trước
Original: Array [ [0] => small [1] => a big string [2] => larger [3] => it is a string thing ] Sorted: Array [ [0] => it is a string thing [1] => a big string [2] => larger [3] => small ]0
Neo tại Nowhere dot com ¶ ¶
14 năm trước
Original: Array [ [0] => small [1] => a big string [2] => larger [3] => it is a string thing ] Sorted: Array [ [0] => it is a string thing [1] => a big string [2] => larger [3] => small ]1
Original: Array [ [0] => small [1] => a big string [2] => larger [3] => it is a string thing ] Sorted: Array [ [0] => it is a string thing [1] => a big string [2] => larger [3] => small ]2
ln[2] + ln[2.718281828459] = 1.69314718055998
Alan Fung ¶
14 năm trước
Original: Array [ [0] => small [1] => a big string [2] => larger [3] => it is a string thing ] Sorted: Array [ [0] => it is a string thing [1] => a big string [2] => larger [3] => small ]4
Original: Array [ [0] => small [1] => a big string [2] => larger [3] => it is a string thing ] Sorted: Array [ [0] => it is a string thing [1] => a big string [2] => larger [3] => small ]5
Original: Array [ [0] => small [1] => a big string [2] => larger [3] => it is a string thing ] Sorted: Array [ [0] => it is a string thing [1] => a big string [2] => larger [3] => small ]6
ln[2] + ln[2.718281828459] = 1.69314718055998
Alan Fung ¶
14 năm trước
Original: Array [ [0] => small [1] => a big string [2] => larger [3] => it is a string thing ] Sorted: Array [ [0] => it is a string thing [1] => a big string [2] => larger [3] => small ]8
Original: Array [ [0] => small [1] => a big string [2] => larger [3] => it is a string thing ] Sorted: Array [ [0] => it is a string thing [1] => a big string [2] => larger [3] => small ]9
$args
0
$args
1
$args
2Alan Fung ¶
15 năm trước
$args
3
Rene Saarsoo ¶ ¶
16 năm trước
$args
4
$args
5
$args
6
ln[2] + ln[2.718281828459] = 1.69314718055998
Chắc chắn ¶ ¶
16 năm trước
$args
8
Chắc chắn ¶ ¶
16 năm trước
$args
9
$code
0
$code
1
$code
2Chắc chắn ¶ ¶
16 năm trước
$code
3
$code
4
ln[2] + ln[2.718281828459] = 1.69314718055998
Chắc chắn ¶ ¶
9 năm trước
$code
6
$code
7
$code
8
$code
9
ln[2] + ln[2.718281828459] = 1.69314718055998
Dave H ¶ ¶
9 năm trước
\$somevar
1
\$somevar
2
\$somevar
3
ln[2] + ln[2.718281828459] = 1.69314718055998
Dave H ¶ ¶
11 năm trước
\$somevar
5
\$somevar
6
\$somevar
7
\$somevar
8
\$somevar
9lombax85 tại gmail dot com ¶
1 năm trước
args
0
args
1
ln[2] + ln[2.718281828459] = 1.69314718055998
Neo tại Nowhere dot com ¶ ¶
14 năm trước
args
3
args
4
args
5
args
6
args
7