This is a collection of questions that come up every now and then about syntax in PHP. This is also a Community Wiki, so everyone is invited to participate in maintaining this list.
It used to be hard to find questions about operators and other syntax tokens.¹
The main idea is to have links to existing questions on Stack Overflow, so it's easier for us to reference them, not to copy over content from …
我有一大堆的名字 - parentname对,我想转成少数heirarchical树形结构成为可能.例如,这些可能是配对:
Child : Parent
H : G
F : G
G : D
E : D
A : E
B : C
C : E
D : NULL
Run Code Online (Sandbox Code Playgroud)
需要转化为(a)层次结构树:
D
??? E
? ??? A
? ? ??? B
? ??? C
??? G
??? F
??? H
Run Code Online (Sandbox Code Playgroud)
我想要的最终结果是一组嵌套的<ul>元素,每个元素都<li>包含孩子的名字.
有在配对没有不一致(孩子是它自己的父母,父母是孩子的孩子,等等),所以一堆优化大概可以做.
在PHP中,我如何从包含child => parent对的数组转到一组嵌套<ul>s?
我有一种感觉,涉及到递归,但我还没有完全清醒地思考它.
浏览codeigniter的源代码,
在它的帮助函数中,我一直看到代码
$CI =& get_instance();
,任何人都可以向我解释这段代码是如何工作的?
我得到它返回对$ CI超级对象的引用,但是它get_instance()来自哪里?
PHP中的"=&"/"&="运算符是什么意思?我在哪里可以阅读有关它们的信息?
搜索Google无济于事.
在Codeigniter中,get_instance()是一个全局可用的函数,它返回包含所有当前加载的类的Controller超级对象(它返回Controller类实例).我将包含当前的源代码:
get_instance() 定义于 Codeigniter.php
// Load the base controller class
require BASEPATH.'core/Controller.php';
function &get_instance()
{
return CI_Controller::get_instance();
}
Run Code Online (Sandbox Code Playgroud)
并CI_Controller定义于Controller.php
class CI_Controller {
private static $instance;
/**
* Constructor
*/
public function __construct()
{
self::$instance =& $this;
// Assign all the class objects that were instantiated by the
// bootstrap file (CodeIgniter.php) to local class variables
// so that CI can run as one big super object.
foreach (is_loaded() as $var => $class)
{
$this->$var =& …Run Code Online (Sandbox Code Playgroud) 找到答案的结果比我想象的要困难得多.由于我不知道您称之为什么,因此很难运行Google搜索,因为它会忽略这些字符.
我尝试浏览PHP Assignment Operators页面,甚至其他操作页面,并没有发现任何告诉我他们究竟做了什么.我不仅仅想根据我使用它的单一功能进行猜测.那么'&='和'=&'运算符到底是做什么的呢?
我所知道的是它设置了一个变量,它是'='部分,所以我真的需要知道'&'部分正在做什么.
请不要说明显; 我需要有人来解释他们的确切行为.我知道其中一个是"按位",但这对我没有任何意义.
我将在PHP中实现一个setter,它允许我指定数组(目标)的键或子键,将名称作为点分隔键值传递.
给出以下代码:
$arr = array('a' => 1,
'b' => array(
'y' => 2,
'x' => array('z' => 5, 'w' => 'abc')
),
'c' => null);
$key = 'b.x.z';
$path = explode('.', $key);
Run Code Online (Sandbox Code Playgroud)
从价值的$key我想达到的值5的$arr['b']['x']['z'].
现在,给定一个变量值$key和一个不同的$arr值(具有不同的深度).
$key?对于getter get()我写了这段代码:
public static function get($name, $default = null)
{
$setting_path = explode('.', $name);
$val = $this->settings;
foreach ($setting_path as $key) {
if(array_key_exists($key, $val)) {
$val = $val[$key];
} …Run Code Online (Sandbox Code Playgroud) 可能重复:
php =&中的引用赋值运算符
$var2 = $var1;
$var2 = &$var1;
Run Code Online (Sandbox Code Playgroud)
例:
$GLOBALS['a']=1;
function test()
{
global $a;
$local=2;
$a=&$local;
}
test();
echo $a;
Run Code Online (Sandbox Code Playgroud)
为什么$ a仍然是1?
我一直在为已移植到CI框架中的项目创建自定义库,但遇到了某些类具有相同名称的问题。
为了避免此问题,我尝试实现命名空间都无济于事。我一直在进行研究,我知道过去可能无法实现,但是对于较新版本的PHP,我想知道是否有一种方法可以做到这一点,或者我是否做得正确。
CI版本:2.1.4 PHP版本:5.4.12
这是我的设置的演示:
应用程序/库/class1.php
<?
class class1{
public function __construct()
{
$CI =& get_instance();
$CI->load->library('foo/class2.php');
}
}
?>
Run Code Online (Sandbox Code Playgroud)
应用程序/库/foo/class2.php
<?
namespace foo
class class2{
function bar(){
}
}
?>
Run Code Online (Sandbox Code Playgroud)
运行CI应用程序时,将出现以下错误:
不存在的类别:class2
谢谢你的帮助。