gpt4 book ai didi

php - 调用函数时出错

转载 作者:行者123 更新时间:2023-12-02 05:36:27 24 4
gpt4 key购买 nike

我一直在寻找答案,但最终还是被难住了。我一直在编写代码以允许多个机器人连接到一个聊天框。我写了所有的主要代码并检查了一遍以确保一切正常。然后当我开始调用使其工作所需的函数时,它给了我一个错误提示:

Notice: Undefined variable: ip in C:\wamp\www\BotRaid.php on line 40

还有一个错误说:

Fatal Error: Cannot access empty property in C:\wamp\www\BotRaid.php on line 40

(此处还有截图:http://prntscr.com/ckz55)

<?php

date_default_timezone_set("UCT");
declare(ticks=1);
set_time_limit(0);

class BotRaid
{
public $ip="174.36.242.26";
public $port=10038;
public $soc = null;
public $packet = array();

##############################
# You can edit below this #
##############################
public $roomid="155470742";
public $userid = "606657406";
public $k = "2485599605";

public $name="";
public $avatar=;
public $homepage="";
##############################
# Stop editing #
##############################

public function retry()
{
$this->connect($this->$ip,$this->$port); //Line 40, where I'm getting the error now.
$this->join($this->$roomid);

while($this->read()!="DIED");
}

public function connect($ip, $port)
{
if($this->$soc!=null) socket_close($this->$soc);
$soc = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if(!$this->$soc)$this->port();
if(!socket_connect($this->$soc,$this->$ip,$this->$port))$this->port();
}

public function port()
{
$this->$port++;
if($this->$port>10038) $this->$port=10038;
$this->retry();
}

public function join($roomid)
{
$this->send('<y m="1" />');
$this->read();
$this->send('<j2 q="1" y="'.$this->$packet['y']['i'].'" k="'.$this->$k.'" k3="0" z="12" p="0" c"'.$roomid.'" f="0" u="'.$this->$userid.'" d0="0" n="'.$this->$name.'" a="'.$this->$avatar.'" h="'.$this->$homepage.'" v="0" />');
$this->port();
$this->$roomid;
}

public function send($msg)
{
echo "\n Successfully connected.";
socket_write($this->$soc, $this->$msg."\0", strlen($this->$msg)+1);
}

public function read($parse=true)
{
$res = rtrim(socket_read($this->$soc, 4096));
echo "\nSuccessfully connected.";
if(strpos(strtolower($res), "Failed"))$this->port();
if(!$res) return "DIED";
$this->lastPacket = $res;
if($res{strlen($res)-1}!='>') {$res.=$this->read(false);}
if($parse)$this->parse($res);
return $res;
}

public function parse($packer)
{
$packet=str_replace('+','@più@',str_replace(' ="',' @=@"',$packet));
if(substr_count($packet,'>')>1) $packet = explode('/>',$packet);
foreach((Array)$packet as $p) {
$p = trim($p);
if(strlen($p)<5) return;
$type = trim(strtolower(substr($p,1,strpos($p.' ',' '))));
$p = trim(str_replace("<$type",'',str_replace('/>','',$p)));
parse_str(str_replace('"','',str_replace('" ','&',str_replace('="','=',str_replace('&','__38',$p)))),$this->packet[$type]);
foreach($this->packet[$type] as $k=>$v) {
$this->packet[$type][$k] = str_replace('@più@','+',str_replace('@=@','=',str_replace('__38','&',$v)));
}
}
}
}

$bot = new BotRaid; //This is where I had the error originally
$bot->retry();

?>

第 40 行在“停止编辑”行下方。有人有什么建议吗?或者可能需要我清理一些东西?

最佳答案

您正在错误地访问类的属性。

行:

$this->connect($this->$ip,$this->$port);

应该是:

$this->connect($this->ip, $this->port);

由于没有名为 $ip 的局部变量,因此在尝试访问该属性时,您的表达式的计算结果为 $this->,因为 PHP 允许您访问属性和函数使用变量。

例如,这会起作用:

$ip = 'ip';
$theIp = $this->$ip; // evaluates to $this->ip

// or a function call
$method = 'someFunction';
$value = $this->$method(); // evaluates to $this->someFunction();

您必须将所有出现的 $this->$foo 更改为 $this->foo,因为您在整个类(class)中都使用了该符号。

如@Aatch 的评论所述,请参阅 variable variables 上的文档进一步解释。但那是你不小心遇到的。

关于php - 调用函数时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com