2012-02-25 44 views
5

我怎么能传递一个类作为参数在我的功能通行证PHP类作为参数

到目前为止,我已经试过

$sc = new SampleClass(); 
SampleFunction($sc); 


function SampleFunction(&$refClass) 
{ 
    echo $refClass->getValue(); 
} 

这是什么IM做一个简单的例子..我实际上必须在这个示例函数中执行复杂的过程。我没有从示例函数得到任何回应。我究竟做错了什么?谢谢

UPDATE

char.php

class Charss { 
    var $name=0; 
    var $hp=500; 
    var $spd=10; 
    var $rtime=10; 
    var $dmg=10; 

    function __construct($name, $hp, $spd, $rtime , $dmg) { 
      $this->name = $name; 
      $this->hp = $hp; 
      $this->spd = $spd; 
      $this->rtime = $rtime; 
      $this->dmg = $dmg; 
     } 

    function get_name() { 
     return $this->name; 
    } 

    function set_name($new_name) { 
     $this->name = $new_name; 
    } 

    function get_hp() { 
     return $this->hp; 
    } 

    function set_hp($new_hp) { 
     $this->hp = $new_hp; 
    } 

    function get_spd() { 
     return $this->spd; 
    } 

    function set_spd($new_spd) { 
     $this->spd = $new_spd; 
    } 

    function get_rtime() { 
     return $this->rtime; 
    } 

    function set_rtime($new_rtime) { 
     $this->rtime = $new_rtime; 
    } 

    function get_dmg() { 
     return $this->get_dmg; 
    } 

    function set_dmg($new_dmg) { 
     $this->dmg = $new_dmg; 
    } 
} 

myclass.php

require("char.php"); 
class Person { 

function try_process() 
{ 
    $chr1 = new Charss("Player1",500,3,0,50); 
    $chr2 = new Charss("Player2",500,6,0,70); 

    while ($chr1->get_hp() > 0 && $chr2->get_hp() > 0) 
    { 
     $sth = min($chr1->get_rtime(), $chr2->get_rtime()); 
     if ($chr1->get_rtime() == 0 && $chr2->get_rtime() > 0) 
     { 
      exit; 
      Fight($chr1,$chr2); 
      $chr1->set_rtime($chr1->get_spd()); 
     } 
     elseif ($chr2->get_rtime() == 0 && $chr1->get_rtime() > 0) 
     { 
      Fight($chr2,$chr1); 
      $chr2->set_rtime($chr2->get_spd()); 
     } 
     else 
     { 
      Fight($chr1,$chr2); #having trouble with this 
      $chr1->set_rtime($chr1->get_spd()); 
     } 
     $chr1->set_rtime($chr1->get_rtime() - $sth); 
     $chr2->set_rtime($chr2->get_rtime() - $sth); 
    } 
} 

function Fight($atk,$def) 
{ 
    $def->set_hp($def->get_hp() - $atk->get_dmg()); 
    echo $atk->get_name() . " attacked " . $def->get_name() . " for " . $atk->get_dmg() . " damage"; 
} 

}

所以即时调用按钮的功能try_process点击

+0

如果您的更新已经完成,现在你的问题是,你不能简单地调用'扑灭($ ATK,$ DEF)',而是需要调用它的形式'$这个 - >扑灭( $ atk,$ def)',因为它是该类的成员。 – mkgrunder 2012-02-25 08:16:54

+0

另外,您在'Charss :: get_dmg()'中使用了属性'$ get_dmg'(而不是'$ dmg'),该属性不存在。我编辑了使用'$ this'的代码,以及确实存在的属性,现在它为我运行。 :) – mkgrunder 2012-02-25 08:26:41

+1

我发现这个希望弄清楚如何传递_class_而不是class_的_instance。 – 2016-06-09 19:29:29

回答

2

你实际上在做的是传递一个对象,而不是一个类。

$sc = new SampleClass(); 

创建一个SampleClass的实例,也就是一个对象。

我假设有一些错误被抛出别处,因为你有什么是正确的。 我测试下面的代码,并得到了预期的输出:

class SampleClass 
{ 
    public function getValue() 
    { 
     return 4; 
    } 
} 

$sc = new SampleClass(); 
SampleFunction($sc); 

function SampleFunction(&$refClass) 
{ 
    echo $refClass->getValue(); 
} 

输出:4

如果您提供的实际代码的详细信息,我们也许能够确定问题所在。

+0

ive发布了一些代码..我只是想尝试一些关于PHP的概念,这就是为什么即时通讯这样做..这些是练习代码即时通讯工作与 – 2012-02-25 06:57:29

+0

我缺乏$这应该调用我的函数$ this-> SampleFunction(&$ refClass)因为我在我的页面上使用需要 – 2012-02-25 07:27:04

0

为什么函数参数的引用?可能不应该。

除此之外,您发布没有任何问题,所以错误可能在SampleClass之内。

+0

我需要它作为参考,因为我必须对该功能中类的Property成员进行更改。可能吗? – 2012-02-25 06:37:15

+0

默认情况下它作为参考传递。 &不是必需的。 – mkgrunder 2012-02-25 06:40:15

1

我看不出什么毛病,使用& $ refClass代码

的,但不建议,我想将非常具有从PHP版本将来重复中删除

,但这里有一个例子

类对象被传递作为参考我想是没有必要的“&”

http://ideone.com/GbmUy

0

其他回答不错,但是这是一个愚蠢的小例子向您介绍如何修改类(通过调用属性setter,或者直接设置公共属性)

class foo { 
    private $member1; 
    public $member2; 

    public function __construct($member1,$member2) { 
      $this->member1=$member1; 
      $this->member2=$member2; 
    } 

    public function SetMember1($value) { 
      $this->member1 = $value; 
    } 
    public function GetMember1() { 
      return $this->member1; 
    } 
} 

function SetMembers(foo $obj, $member1, $member2) { 
    // Call a setter 
    $obj->SetMember1($member1); 

    // Set a member variable directly 
    $obj->member2 = $member2; 
} 

$obj = new foo('default member 1', 'default member 2'); 

echo "member1 (before): {$obj->GetMember1()}\n"; 
echo "member2 (before): {$obj->member2}\n"; 

// Change values 
SetMembers($obj, 'new member1', 'new member2'); 

echo "member1 (after): {$obj->GetMember1()}\n"; 
echo "member2 (after): {$obj->member2}\n"; 

这将输出:

member1 (before): default member 1 
member2 (before): default member 2 
member1 (after): new member1 
member2 (after): new member2 
+0

嗨实际上已经有那些我认为..我担心传递参数是参数是一个类 – 2012-02-25 06:59:15