Làm thế nào tôi có thể vượt qua một lớp học như một tham số trong chức năng của tôiđèo PHP Class như Parameter
Cho đến nay tôi đã cố gắng
$sc = new SampleClass(); SampleFunction($sc); function SampleFunction(&$refClass) { echo $refClass->getValue(); }
đây là một ví dụ đơn giản về những gì im làm .. tôi thực sự phải làm các thủ tục phức tạp bên trong hàm mẫu này. Tôi không nhận được bất kỳ phản ứng nào từ chức năng mẫu. Tôi đang làm gì sai? cảm ơn bạn
CẬP NHẬT
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";
}
}
để im gọi hàm try_process trên nút, hãy nhấp vào
Nếu cập nhật của bạn đã hoàn tất, vấn đề của bạn là bạn không thể gọi đơn giản là 'Chiến đấu ($ atk, $ def) ', mà cần gọi nó dưới dạng' $ this-> Fight ($ atk, $ def) ', vì nó là thành viên của lớp. – mkgrunder
Ngoài ra, bạn đang sử dụng thuộc tính '$ get_dmg' (thay vì' $ dmg') trong 'Charss :: get_dmg()', không tồn tại. Tôi đã chỉnh sửa mã để sử dụng '$ this' và thuộc tính hiện tồn tại và nó hiện đang chạy cho tôi. :) – mkgrunder
Tôi thấy điều này hy vọng tìm ra cách vượt qua một _class_ không phải là một _instance của một class_. –