<?php foo(); function foo(): void { // 重要说明:虽然$var变量在自定义函数外部从未声明,但由于使用了global修饰,所以$var在自定义函数外部也能使用了。 global $var; $var = 'PHP是世界上最好の语言'; } echo $var; // PHP是世界上最好の语言 //========== 总结 ==========// // 1、上面的代码是不规范的,强烈建议不要这样写,并不是说不能在自定义函数内部使用global关键字引用外部变量, // 而是使用global修饰的变量应该确保在自定义函数外部就已经初始化好了。
<?php $name = '张三'; function foo(): void { global $name; global $age; global $gender; $gender = '男'; if (isset($name)) { echo '自定义函数内部:变量$name已声明' . PHP_EOL; // 自定义函数内部:变量$name已声明 } else { echo '自定义函数内部:变量$name未声明' . PHP_EOL; } if (isset($age)) { echo '自定义函数内部:变量$age已声明' . PHP_EOL; } else { echo '自定义函数内部:变量$age未声明' . PHP_EOL; // 自定义函数内部:变量$age未声明 } if (isset($gender)) { echo '自定义函数内部:变量$gender已声明' . PHP_EOL; // 自定义函数内部:变量$gender已声明 } else { echo '自定义函数内部:变量$gender未声明' . PHP_EOL; } } foo(); if (isset($name)) { echo '自定义函数外部:变量$name已声明' . PHP_EOL; // 自定义函数外部:变量$name已声明 } else { echo '自定义函数外部:变量$name未声明' . PHP_EOL; } if (isset($age)) { echo '自定义函数外部:变量$age已声明' . PHP_EOL; } else { echo '自定义函数外部:变量$age未声明' . PHP_EOL; // 自定义函数外部:变量$age未声明 } if (isset($gender)) { echo '自定义函数内部:变量$gender已声明' . PHP_EOL; // 自定义函数内部:变量$gender已声明 } else { echo '自定义函数内部:变量$gender未声明' . PHP_EOL; } //========== 总结 ==========// // 1、自定义函数内部使用global修饰的变量也能用isset()对其进行判断,结果和在自定义函数外部是一样的。 // 2、使用global修饰一个函数内外都没声明过的变量,如果不赋值,那么它的值默认为null,所以isset()结果为false。
<?php $name = '张三'; $gender = '男'; $age = 18; function foo(): void { global $age; echo "(1) 俺叫{$GLOBALS['name']}({$GLOBALS['gender']}),今年{$age}岁。" . PHP_EOL; // (1) 俺叫张三(男),今年18岁。 $GLOBALS['name'] = '李四'; $GLOBALS['gender'] = '女'; $age = 17; } foo(); echo "(2) 俺叫{$name}({$gender}),今年{$age}岁。" . PHP_EOL; // (2) 俺叫李四(女),今年17岁。 //========== 总结 ==========// // 1、无论是global关键字还是$GLOBALS数组,它们的效果是完全一样的,都能在自定义函数内部引用外部变量, // 并且在函数内部修改这些变量会影响外部的值。
Copyright © 2024 码农人生. All Rights Reserved