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

PHP未定义变量/调用非对象上的成员函数,php,function,class,undefined,Php,Function,Class,Undefined,系统在最后一个if上给了我一个错误。$nomeportefolio上未定义的变量。在非对象上调用do成员函数()addedesortefolio。 如果我在改变函数变量之前将这两行移到If,它会起作用,但我需要在最后一个If上使用它!有人能帮忙吗 <?php include ("Ideia.php"); $handle = @fopen("C:\Users\Bia\Desktop\Projecto ES/input.txt", "r"); if ($handle) {

系统在最后一个if上给了我一个错误。$nomeportefolio上未定义的变量。在非对象上调用do成员函数()addedesortefolio。 如果我在改变函数变量之前将这两行移到If,它会起作用,但我需要在最后一个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);
}

您正在if语句中设置
$nomeportefolio
。如果($partial==“idea”)
conditional*调用
$nomeportfolio
但没有设置它,您就有可能处于
$portfolio!==“公文包”
尚未设置。您需要做的是将“想法”检查放入投资组合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();
        }
    }

错误
调用非对象上的成员函数
表示您试图对非对象的变量使用函数

在这种情况下,
$nomeportfolio->addideiasportfolio($iduser,$iduser)

但为什么会这样?很简单,您将
$nomeportfolio
设置为
portfolio
类的一个实例,仅在代码的以下部分:

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

    }
但是,如果
$portefolio
不等于“投资组合”,而
$partial
等于“想法”,该怎么办


简单:p如果($portefolio==“portfolio”)
没有执行,它尝试调用
$nomeportefolio
上的函数
->addideAsPortfolio()

$nomeportfolio=“portfolio.”$iduser的意义是什么,因为您覆盖了它?