php 调用 自定义 函数

在 PHP 中,函数参数可以是值类型或引用类型。 值类型的参数传递会创建函数参数的拷贝,而引用类型的参数将使用与函数调用中提供的变量相同的内存地址。 对于对象来说,传递的参数是引用类型,因此函数调用中的对象参数将与原始对象共享内存地址。

考虑以下示例:

```

class Person {

public $name;

public function __construct($name) {

$this->name = $name;

}

public function setName($newName) {

$this->name = $newName;

}

}

function changePersonName($person, $newName) {

$person->setName($newName);

}

$person1 = new Person("John");

$person2 = $person1;

changePersonName($person1, "David");

echo $person1->name; // 输出 David

echo $person2->name; // 输出 David

```

在这个例子中,我们定义了一个名为 Person 的类,它具有一个公共属性 name 和一个名为 setName 的公共方法,该方法将 $name 属性设置为传递的新名称。我们还定义了一个名为 changePersonName 的函数,该函数接受一个人对象和一个新名称,并使用对象的 setName 方法更改对象的属性。

在主代码块中,我们创建了一个 person1 对象,并使用 $person2 变量引用它。 然后我们调用 changePersonName 函数,将 person1 对象和一个新名称传递给它。

由于对象是通过引用传递的,因此 changePersonName 函数将更改 person1 对象的名称,并且由于 $person2 与 person1 共享相同的内存地址,它也将更改 $person2 引用的对象名称。

因此,最终的输出是:

```

David

David

```

如果我们使用值类型参数传递 person 对象,即使更改对象的名称,它也不会影响原始对象。让我们看看这个例子,

```

class Person {

public $name;

public function __construct($name) {

$this->name = $name;

}

public function setName($newName) {

$this->name = $newName;

}

}

function changePersonNameValue($person, $newName) {

$person = new Person($newName);

}

$person1 = new Person("John");

$person2 = $person1;

changePersonNameValue($person1, "David");

echo $person1->name; // 输出 John

echo $person2->name; // 输出 John

```

在这个例子中,我们定义了与第一个例子相同的 Person 类,但使用了一个新的函数 changePersonNameValue,该函数接受一个人对象和一个新名称,但在内部创建了一个新对象并分配给传递的变量。我们再次创建 person1 和 person2 对象,将 person1 分配给 person2 变量,并调用 changePersonNameValue 函数来更改 person1 对象的名称。

由于我们使用了值类型参数传递 person 对象,它不会更改原始对象的名称。 更改只影响函数参数的拷贝。因此,最终的输出是:

```

John

John

```

总结一下,PHP 通过引用传递对象,因此在函数中更改对象的属性将影响原始对象,即使对象通过变量传递。 对于值类型参数,函数会创建参数值的副本,并将其用作函数内部的参数。 因此,更改值类型参数不会影响原始参数的值。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(96) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部