如果出现特定情况,则不加载php命名常量

如果出现特定情况,则不加载php命名常量,php,constants,Php,Constants,我对类方法有一个非常奇怪的问题: function delete($fileDaEliminare = null) { if ($fileDaEliminare == "tutti") { $query = "DELETE FROM " . $this->table_name . " WHERE idIncarico = :idIncarico"; $stmt = $this->conn->prepare($query);

我对类方法有一个非常奇怪的问题:

    function delete($fileDaEliminare = null) {

    if ($fileDaEliminare == "tutti") {
        $query = "DELETE FROM " . $this->table_name . " WHERE idIncarico = :idIncarico";
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(':idIncarico', $this->idIncarico);
        $stmt->execute();

        *** CASE 1 : ERROR ***
        $percorso = APPROOT . DS . UPLOADFOLDER . DS . $this->idIncarico . "*";
        $this->fileSystem->eliminaCartella($percorso);

    } else {
        $query = "DELETE FROM " . $this->table_name . " WHERE fileName = :fileName and idIncarico = :idIncarico";
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(':fileName', $fileDaEliminare);
        $stmt->bindParam(':idIncarico', $this->idIncarico);
        $stmt->execute();

        *** CASE 2 : OK ***
        $percorso = APPROOT . DS . UPLOADFOLDER . DS . $this->idIncarico;
        $nomeFile = $fileDaEliminare;
        $this->fileSystem->eliminaFile($percorso . DS . $nomeFile);

        // elimina cartella se vuota
        if ($this->fileSystem->cartellaVuota($percorso)) {
            $this->fileSystem->eliminaCartella($percorso);
        }
    }
}
如果我把它叫做

$allegato->delete(“tutti”)
(案例1)

我无法访问我的命名常量。。。但是如果我调用相同的方法

$allegato->delete($fileDaEliminare)
(案例2)

一切正常

这是类方法的完整代码:

    function delete($fileDaEliminare = null) {

    if ($fileDaEliminare == "tutti") {
        $query = "DELETE FROM " . $this->table_name . " WHERE idIncarico = :idIncarico";
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(':idIncarico', $this->idIncarico);
        $stmt->execute();

        *** CASE 1 : ERROR ***
        $percorso = APPROOT . DS . UPLOADFOLDER . DS . $this->idIncarico . "*";
        $this->fileSystem->eliminaCartella($percorso);

    } else {
        $query = "DELETE FROM " . $this->table_name . " WHERE fileName = :fileName and idIncarico = :idIncarico";
        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(':fileName', $fileDaEliminare);
        $stmt->bindParam(':idIncarico', $this->idIncarico);
        $stmt->execute();

        *** CASE 2 : OK ***
        $percorso = APPROOT . DS . UPLOADFOLDER . DS . $this->idIncarico;
        $nomeFile = $fileDaEliminare;
        $this->fileSystem->eliminaFile($percorso . DS . $nomeFile);

        // elimina cartella se vuota
        if ($this->fileSystem->cartellaVuota($percorso)) {
            $this->fileSystem->eliminaCartella($percorso);
        }
    }
}
在这两种情况下,使用
get_defined_constants
转储定义的常量,案例2中确实缺少
[user]
部分

config.php

define('TIMEZONE', 'Europe/Rome');
define('UPLOADFOLDER', "uploads");
define('PERIZIEFOLDER', "perizieGenerate");
define('DS', DIRECTORY_SEPARATOR);
define('APPROOT', realpath(__DIR__ . '/..'));

下面是一个基于您的晦涩代码示例的示例,由于您没有提供更多信息,不知道它能否解决您的特定问题,但下面是:

<?php

// prepare test vars and constants
define('DS', DIRECTORY_SEPARATOR);
define('UPLOADFOLDER', 'UPLOADFOLDERconstant');
define('APPROOT', '/var/www/approotDir');

class MyClass{

    var $idIncarico = 999;

    function delete($fileDaEliminare = null) {

        if ($fileDaEliminare == "tutti") {

            echo 'CASE 1: ', $fileDaEliminare, "<br>";
            $percorso = UPLOADFOLDER;
            echo '$percorso: ', $percorso, "<br><br>";
        }
        else {

            echo 'CASE 2: ', $fileDaEliminare, "<br>";
            $percorso = APPROOT . DS . UPLOADFOLDER . DS . $this->idIncarico;
            echo '$percorso: ', $percorso, "<br><br>";
        }
    }
}

$fileDaEliminare = 'test123';
$allegato = new MyClass();
$allegato->delete('tutti');             // test CASE 1
$allegato->delete($fileDaEliminare);    // test CASE 2
?>


p.S.对原始问题的评论有有效的观点。您的错误表明问题在于UPLOADFOLDER常量,因此请查看定义它的位置。请注意,在我上面的示例代码中,我在顶部定义了相同的常数。

原始代码中可能有输入错误?也许常数还没有定义?没有。您需要向我们展示更多的代码,以及您在哪里定义了常量。如果您使用的是“tutti”而不是“tutti”,那么这是两种不同的动物。你的问题在目前的状态下是不可能回答的,因为你有所有的拼图,我们没有。走开。。。buon fortunato.@Fred-ii-我没有用“Tutti”而是用“Tutti”。。。正如我的代码所述。。。是的,关于谜题。。但这是一个大难题,我会花时间更好地解释。不管怎么说,祝你好运吧;-)非常感谢。我犯了两个愚蠢的错误:没有看到配置文件没有包含在这里,并用我们以前的想法写在这里;-)