【问题标题】:Php Object oriented, Function callingPHP面向对象,函数调用
【发布时间】:2014-01-30 22:19:15
【问题描述】:

这是我的php页面persona.php

<?php
 class persona {
 private $name;
 public function __construct($n){
    $this->name=$n;
 }
 public function getName(){
    return $this->name;
}

public function changeName($utente1,$utente2){
    $temp=$utente1->name;
    $utente1->name=$utente2->name;
    $utente2->name=$temp;

    }
}
?>

persona 类很简单,只显示了构造函数和一个在调用时更改两个用户名的函数。

这是index.php

<?php
require_once "persona.php" ;
    $utente1 = new persona("Marcello");
    print "First user: <b>". $utente1->getName()."</b><br><br>";
    $utente2 = new persona("Sofia");
    print "Second user: <b>". $utente2->getName()."</b><br>";
    changename($utente1,$utente2);
    print " Test after name changes: first user". $utente1->getName()."</b> second user". $utente2->getName();
?>

我不明白的是如何从这里调用changeName 函数。

【问题讨论】:

  • 所以你知道怎么打电话给getName,但不能打电话给changeName()
  • $utente1->changename($utente1,$utente2);

标签: php function object call


【解决方案1】:

我可以理解混乱的根源...我认为您不确定是否应该在$utente1$utente2 上致电changename。从技术上讲,您可以从任一对象调用它,因为它们都是 Persona 的实例

但为了清楚起见(和理智),我建议在其声明中将 changeName 函数转换为 static function

public static function changeName($utente1,$utente2){

然后在您的 index.php 中,您可以将其称为:

Persona::changename($utente1,$utente2);

从体系结构的角度来看,这将有助于更好地理解该函数与 Persona 的类相关联,并且对象可以使用该类函数更改交换名称,而不是使其成为实例函数,然后具有任何对象执行它。

【讨论】:

    【解决方案2】:

    在您的特定情况下,您可以将其称为:

    $utente1->changename($utente1,$utente2);
    or
    $utente2->changename($utente1,$utente2);
    

    哪个都无所谓。由于该方法本身不适用于类属性(但仅适用于方法参数),因此您可以从任何存在的对象调用它。

    但更好的(最佳实践,更好的设计)是开发一个静态方法,正如 Raidenace 已经说过的那样,并称之为:

    Persona::changename($utente1,$utente2);
    

    【讨论】:

    • 非常感谢你们两个 :) 如果这个问题看起来很愚蠢,我很抱歉,但即使我非常擅长 php 编程和 java,这也是我第一次尝试接近 php OO。再次感谢您!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2016-09-08
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多