如果出现特定情况,则不加载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”。。。正如我的代码所述。。。是的,关于谜题。。但这是一个大难题,我会花时间更好地解释。不管怎么说,祝你好运吧;-)非常感谢。我犯了两个愚蠢的错误:没有看到配置文件没有包含在这里,并用我们以前的想法写在这里;-)