function parent($key)
{
function son()
{
global $key;
}
}
我想实现这个目标:
son
可以访问$key
parent
醇>
由于这是一个非常简单的功能,我不想将parent
更改为类
好的,我被告知function
无论如何都是全球性的。那么son
是否有办法获得$key
的{{1}}呢?
答案 0 :(得分:1)
PHP中的所有函数都有global scope
- 它们可以在函数外部调用,即使它们在内部中定义,反之亦然。
有关详细信息,请参阅PHP manual
答案 1 :(得分:0)
为什么你不能考虑OOP方法?使用不同修饰符定义类:public / private ...当然我简化了,但是朝着这个方向前进将有助于实现你的目标。
如果您坚持不使用OOP,但仍需要这样做,请阅读:http://www.steike.com/code/php-closures/和此http://wiki.php.net/rfc/closures。由于闭包,我只知道如何在没有OOP的情况下完成它,而是使用函数式编程。
答案 2 :(得分:0)
您可以在OOP中执行此操作,但无法在另一个内部创建一个函数。但是,一种方式可能是这样的:
// make sure that parent function exists
if (function_exists('parent'))
{
// ok fine, now create the son function
function son()
{
global $key;
}
}
答案 3 :(得分:0)
既然你提到usort()
,这可行吗?
$arr = array('foo', 'bar', 'tork', 'zug');
usort($arr, 'mysort');
function mysort($a, $b) {
$a = do_something_with_a($a);
$b = do_something_with_b($b);
return strcmp($a, $b);
}
function do_something_with_a($val) {
return strrev($val);
}
function do_something_with_b($val) {
return strrev($val);
}
print_r($arr);
答案 4 :(得分:0)
从PHP 5.3开始,你可以这样做:
function parent($key) {
$son = function() use (&$key) {
var_dump($key);
};
$son();
}
parent('foo');
关于我们 - 你在寻找这样的东西吗?
$key = 'foo';
$arr = array(
array(0, 'foo' => 1),
array(1, 'foo' => 4),
array(2, 'foo' => -2),
);
usort($arr, function ($a, $b) use (&$key) {
$a = $a[$key];
$b = $b[$key];
if ($a == $b) return 0;
return ($a < $b) ? -1 : 1;
});
var_dump($arr);
答案 5 :(得分:0)
根据我的理解,您需要一个为您生成自定义排序功能的函数,具体取决于传递的参数,
function sorter($param) {
return function($a, $b) use($param) {
if($param == 'asc') return $a - $b;
if($param = 'desc') return $b - $a;
};
}
$a = array(1, 6, 2, 5, 3, 4);
usort($a, sorter('asc'));
print_r($a);
usort($a, sorter('desc'));
print_r($a);
(仅限php 5.3)