php中有指针吗?

2022-08-30 09:26:37

此代码是什么意思?这是你在php中声明指针的方式吗?

$this->entryId = $entryId;

答案 1

PHP 中的变量名称以 $ 开头,因此$entryId是变量的名称。$this是PHP中面向对象编程中的一个特殊变量,它是对当前对象的引用。-> 用于访问 PHP 中的对象成员(如属性或方法),如 C++ 中的语法。所以你的代码的意思是这样的:

将变量 $entryId 的值放入此对象的 entryId 字段(或属性)中。

PHP 中的 & 运算符表示传递引用。下面是一个示例:

$b=2;
$a=$b;
$a=3;
print $a;
print $b;
// output is 32

$b=2;
$a=&$b; // note the & operator
$a=3;
print $a;
print $b;
// output is 33

在上面的代码中,由于我们使用了 &operator,因此对$b指向的位置的引用存储在$a中。所以$a实际上是对$b的引用。

在 PHP 中,参数默认按值传递(受 C 启发)。因此,在调用函数时,当您传入值时,它们是按值而不是按引用复制的。这是大多数情况下的默认设置。但是,在定义函数时,有一种方法可以通过引用行为。例:

function plus_by_reference( &$param ) {
      // what ever you do, will affect the actual parameter outside the function
      $param++;
}

$a=2;
plus_by_reference( $a );
echo $a;
// output is 3

有许多内置函数的行为与此类似。与排序的 sort() 函数一样,数组将直接影响数组,并且不会返回另一个排序的数组。

不过,有一些有趣的事情需要注意。由于按值传递模式可能会导致更多的内存使用,并且 PHP 是一种解释型语言(因此用 PHP 编写的程序不如编译的程序快),为了使代码运行得更快并最大限度地减少内存使用量,PHP 解释器中有一些调整。一个是懒惰复制(我不确定名字)。这意味着:

当您将一个变量处理到另一个变量中时,PHP 会将对第一个变量的引用复制到第二个变量中。因此,到目前为止,您的新变量实际上是对第一个变量的引用。尚未复制该值。但是,如果您尝试更改这些变量中的任何一个,PHP 将创建该值的副本,然后更改该变量。这样,如果您不更改值,您将有机会节省内存和时间。

所以:

$b=3;
$a=$b;
// $a points to $b, equals to $a=&$b
$b=4;
// now PHP will copy 3 into $a, and places 4 into $b

完成所有这些之后,如果要将$entryId的值放入对象的“entryId”属性中,则上述代码将执行此操作,并且不会复制entageId的值,直到您更改其中任何一个,导致内存使用量减少。如果您实际上希望它们都指向相同的值,请使用以下命令:

$this->entryId=&$entryId;

答案 2

不,正如其他人所说,“PHP中没有指针”,我补充说,PHP中没有RAM_related。

而且所有的答案都很清楚。但是有一些点被遗漏了,我无法抗拒!

有许多事情的行为类似于指针

  • eval结构(我最喜欢的,也是危险的)
  • $GLOBALS变量
  • 变量前的额外“$”符号(如 prathk 提到的)
  • 引用

第一个

首先,我不得不说PHP是一种非常强大的语言,因为我知道有一个名为“eval”的构造,因此您可以在运行它时创建PHP代码!(真的很酷!

尽管存在PHP_Injection的危险,但其破坏性远大于SQL_Injection。小心!

例:

法典:

$a='echo "Hello World.";';
eval ($a);

输出

世界您好。

因此,您不必使用指针来充当另一个变量,而是可以从头开始创建一个变量


第二个

$GLOBAL变量非常有用,您可以使用其键访问所有变量。

例:

法典:

$three="Hello";$variable=" Amazing ";$names="World";
$arr = Array("three","variable","names");
foreach($arr as $VariableName)
    echo $GLOBALS[$VariableName];

输出

你好,神奇的世界

注意:其他超群可以在较小的尺度上做同样的事情。


第三个

您可以在变量之前添加任意数量的“$”,如果您知道自己在做什么。

例:

法典:

$a="b";
$b="c";
$c="d";
$d="e";
$e="f";

echo $a."-";
echo $$a."-";   //Same as $b
echo $$$a."-";  //Same as $$b or $c
echo $$$$a."-"; //Same as $$$b or $$c or $d
echo $$$$$a;    //Same as $$$$b or $$$c or $$d or $e

输出

b-c-d-e-f


最后一个

引用非常接近指针,但您可能需要检查此链接以获取更多说明。

示例 1:

法典:

$a="Hello";
$b=&$a;
$b="yello";
echo $a;

输出

耶洛

示例 2:

法典:

function junk(&$tion)
{$GLOBALS['a'] = &$tion;}
$a="-Hello World<br>";
$b="-To You As Well";
echo $a;
junk($b);
echo $a;

输出

-你好世界

-也给你

希望它有帮助。


推荐