【问题标题】:Require Once stops script需要一次停止脚本
【发布时间】:2011-10-07 21:42:20
【问题描述】:

我有一个包含内容的 php 脚本 test.php

<?php
     require_once("classes/user.php");
     echo "test";
?>

这里是user.php的内容

<?php 
class User {
    private $data = array();

    public function __set($name, $value) {
        $this->data[$name] = $value;
    }

    public function __get($name) {
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }

        $trace = debug_backtrace();
        trigger_error(
            'Undefined property via __get(): ' . $name .
            ' in ' . $trace[0]['file'] .
            ' on line ' . $trace[0]['line'],
            E_USER_NOTICE);
        return null;
    }

    public function __isset($name) {
        return isset($this->data[$name]);
    }

    public function __unset($name) {
        unset($this->data[$name]);
    }

    public __construct($param) {
        if(is_array($param)) $this->create($param);
        else $this->id($param);
    }

    private id($id) { //select from database
        require_once('config.php');

        $pdo = new PDOConfig();

        $sql = "SELECT * FROM users WHERE `id` = :id";

        $q = $pdo->prepare($sql);
        $q->execute(array(":id"=>$id));
        $resp = $q->fetchAll();

        foreach ($resp as $row) {
            foreach ($row as $key=>$value) {
                if(!is_int($key))
                    $this->data[$key] = html_entity_decode($value, ENT_QUOTES);
            }
        }

        $pdo = null;
        unset($pdo);
    }

    private create($arr) { //create new item from values in array and insert to db

    }

    public delete() {
        $this->life = 0;
        //update database "life" here
    }   

    /* ##################################### */
    /* !Functions                            */
    /* ##################################### */

    public projects($extra = null) {
        $projects = array();
        require_once('project.php');

        $pdo = new PDOConfig();

        $sql = "SELECT * FROM ---- WHERE `000` = :aaa";

        if($extra) $sql .= " " . $extra;

        $q = $pdo->prepare($sql);
        $q->execute(array(":aaa"=>$this->id));
        $resp = $q->fetchAll();

        foreach ($resp as $row) {
                $project = new Project($row['id']);
                $projects[] = $project;

                $project = null;
                unset($project);
        }

        return $projects;
    }

}
?>

并且永远不会打印测试,并且在 chrome 上根本不会加载页面

网站在检索 http://example.com/test.php 时遇到错误。它可能因维护而停机或配置不正确。

我这辈子都想不通。感谢它提前

【问题讨论】:

  • 尝试添加error_reporting(E_ALL);到脚本的顶部。您是否收到任何新的错误消息?
  • 在 Chrome 中查看源代码。对于简短的错误消息,Chrome 会隐藏您的错误消息并显示其默认消息。烦人的“功能”。
  • @ceejayoz HTTP 错误 500(内部服务器错误):服务器尝试完成请求时遇到意外情况。并且错误报告没有显示任何新内容。

标签: php oop class require require-once


【解决方案1】:

__construct() 方法的声明中有语法错误:

public __construct($param) {
    if(is_array($param)) $this->create($param);
    else $this->id($param);
}

你需要使用function关键字,像这样:

public function __construct($param) {
    if(is_array($param)) $this->create($param);
    else $this->id($param);
}


为了帮助找到这些错误,在您的开发计算机上,您应该启用:

事实上,我只是将你的代码复制粘贴到一个.php 文件并运行它——结果很好

Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE 
    in /home/.../temp/temp.php on line 39

【讨论】:

  • 你是神。这让我在周末的大部分时间里都很生气。我知道这很简单,现在我觉得自称是 php 开发人员是一种耻辱。 :) 继续努力。
  • 下一次(好吧,实际上,一直都是,在开发时;-))启用错误报告;-)
  • 欣赏它,并且会做到的。 :)
  • 我无法进行错误报告,将 E_ALL 报告之类的内容放在页面顶部没有任何作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多