PHP未定义的变量/调用对非对象执行成员函数

时间:2014-01-12 00:09:32

标签: php function class undefined

系统在最后一个if上给我一个错误。 $ nomeportefolio上的未定义变量。在非对象上调用成员函数()addideasportefolio。 如果我将这2行移动到if之前更改函数变量,它可以工作,但我需要它在最后如果!有人可以帮忙吗?

    <?php

include ("Ideia.php");

$handle = @fopen("C:\Users\Bia\Desktop\Projecto ES/input.txt", "r");

if ($handle) {
    $booleanuser = FALSE;
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        $partial = substr($buffer, 0, 4);
        $nomeuser;
        $iduser;
        $saldo = substr($buffer, 0, 5);
        $portefolio = substr($buffer, 0, 9);
        $nomeportefolio;


        if ($partial == "user") {
            $booleanuser = TRUE;
            $nomeuser=substr($buffer, 0, 5);
            $iduser=substr($buffer, 4, 1);
            $nomeuser = new User($iduser);
        }

        if ($booleanuser == FALSE) {
            if ($partial == "idea") {
                $nomeideia=substr($buffer, 0, 5);
                $idideia=substr($buffer, 4, 1);
                $nomeideia = new Ideia($idideia);
            }
        }

        if ($saldo == "Saldo"){
            $nomeuser->addsaldo(substr($buffer, 7));
            echo $nomeuser->greetuser();    
        }

        if ($portefolio == "Portfolio"){
            $nomeportefolio="portefolio".$iduser;
            $nomeportefolio = new Portefolio($iduser,$iduser);

        }
        if ($partial == "idea"){
            $nomeportefolio->addideiasportefolio($iduser,$iduser);
            //função que mostra os ids das ideias no portefólio
            echo $nomeportefolio->mostraportefolio();
        }


    }
    fclose($handle);
}

2 个答案:

答案 0 :(得分:0)

您在一段时间内在if语句中设置$nomeportefolio。正好if ($partial == "idea")条件* 调用 $nomeportefolio但是没有设置它,你冒着在$portefolio !== "Portfolio"的循环中存在的风险,所以它没有设置。您需要做的是提出&#34;想法&#34;检查投资组合中的if语句:

    if ($portefolio == "Portfolio"){
        $nomeportefolio="portefolio".$iduser;
        $nomeportefolio = new Portefolio($iduser,$iduser);

        if ($partial == "idea"){
            $nomeportefolio->addideiasportefolio($iduser,$iduser);
            //função que mostra os ids das ideias no portefólio
            echo $nomeportefolio->mostraportefolio();
        }
    }

答案 1 :(得分:0)

错误Call to a member function on a non-object表示您正在尝试对不是对象的变量使用函数。

在这种情况下,$nomeportefolio->addideiasportefolio($iduser,$iduser);

为什么会发生什么?很简单,您只是将$nomeportefolio设置为代码的以下部分的Portefolio类的实例:

if ($portefolio == "Portfolio"){
        $nomeportefolio="portefolio".$iduser;
        $nomeportefolio = new Portefolio($iduser,$iduser);

    }

但如果$portefolio 等于“投资组合”但$partial 等于“idea”

简单:P它尝试在{{1>}上调用非对象上的函数->addideiasportefolio(),因为$nomeportefolio没有执行;)