PHP:致命错误:调用非对象上的成员函数[重复]

2023-12-24

在这里遇到一个非常奇怪的错误,我正在编写一个平面文件数据库类,这一切都工作正常,直到我刷新,现在我不断收到此消息:

致命错误:调用非对象上的成员函数 name()/home/reithg/public_html/test/engine/class.database.php在线的50

我按如下方式调用该类:

<?php
ini_set('display_errors', '1');

require('engine/class.database.php');

$config = new Config("lessons", array('first', 'second', 'third', 'fourth'), "data/");
$db = new Database($config, true);

print("Querying DB for 'theta' no exclusions: <br />");
print_r($db->query('theta', NULL, NULL));

print("<p /> Querying DB for 'theta' in column 'second': <br />");
print_r($db->query('theta', 'second', NULL));

print("<p /> Querying DB for first two rows: <br />");
print_r($db->getRows(2));

print("<p /> Querying DB for last three rows: <br />");
print_r($db->getRows(3, true));

print("<p /> Cleaning data for safe DB input: <br />");
$testInput = array('escape|these||delimiters','and\these\\slashes','and\0these\0nulls',"don't, forget quotes");
print("input: ");
print_r($testInput);
echo("<br />output: ");
print($db->addRow($testInput));
?>

这是我的类.数据库.php

<?php
require('class.config.php');
require('class.column.php');

    class Database {
        private
            $_config,
            $_pointer;

        public function __construct(Config $config)  {
            $this->_config = $config;
            return true;
        }

        private function connect($method) {
            if (!($this->_pointer = @fopen($this->_config->db(), $method)))
            echo("Unable to connect to database");
        }

        private function disconnect() {
            fclose($this->_pointer);
        }

        private function lock($method) {
            if(flock($this->_pointer, $method))
                return true;
            return false;
        }

        private function unlock() {
            flock($this->_pointer, LOCK_UN);
        }

        private function cleanInput($input) {   
            $data = array_map(array($this, 'escapeData'), $input);
            $output = implode($this->_config->delimiter(), $data)."\r\n";
            return $output;
        }

        private function escapeData($data) 
        {
            $search = array('\\', '"', "'", '\\0', '\n', $this->_config->delimiter());
            $replace = array('\\\\', '\"', "\'", '\\0', '\\n', '\\'.$this->_config->delimiter());
            $output = str_replace(array_unique($search), array_unique($replace), $data);
            return $output;
        }

        private function formatRow($data) {
            foreach($data as $key => $value) {
                $row[$this->_config->columns($key, "position")->name()] = $value;
            }
            return $row;
        }

        public function dumpToArray() {
            $arrayDump;
            foreach(file($this->_config->db(), FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $row => $content)
                $arrayDump[$row] = formatRow(explode($this->_config->delimiter(),$content));
            return $arrayDump;
        }

        public function addRow(array $data) {
            $this->connect('ab');
            if($this->lock(LOCK_EX)) {
                // fwrite($this->_pointer, $this->cleanInput($data));
                echo($this->cleanInput($data));
                $this->unlock();
                $this->disconnect();
                return true;
            } else {
                $this->disconnect();
                return false;
            }
        }

        public function query($value, $column = NULL, $limit = NULL) {
            $this->connect('rb');
            $results = array();
            while ((is_null($limit) || (count($results) < $limit)) && !feof($this->_pointer)) {
                $data = explode($this->_config->delimiter(), fgets($this->_pointer, 1024));
                if(!is_null($column)) {
                    if ($data[$this->_config->columns($column, "string")->index()] == $value)
                        array_push($results, $this->formatRow($data));
                } else {
                    if (in_array($value, $data))
                        array_push($results, $this->formatRow($data));
                }
            }
            $this->disconnect();
            switch (count($results)) {
                case 0;
                    return false;
                case 1;
                    return $results[0];
                default;
                    return $results;
            }
        }

        public function getRows($limit = 1, $reverse = false) {
            $this->connect('rb');
            $offset = 0;
            $results = array();
            if ($reverse) {
                while(count($results) < $limit && fseek($this->_pointer, $offset, SEEK_END) >= 0) {
                    $char = fgetc($this->_pointer);
                    if($char == "\n" || $char == "\r"){
                        $offset --;
                        $data = explode($this->_config->delimiter(), fgets($this->_pointer, 1024));
                        array_push($results, $this->formatRow($data));
                    }
                    $offset--;
                }
                $results = array_reverse($results);
            } else {
                while ((($limit === NULL) || (count($results) < $limit)) && !feof($this->_pointer)) {
                    $data = explode($this->_config->delimiter(), fgets($this->_pointer, 1024));
                    array_push($results, $this->formatRow($data));
                }
            }
            $this->disconnect();
            return $results;
        }
    }
?>

类.config.php

<?php
    class Config {
        private
            $_db,
            $_file,
            $_columns = array(),
            $_directory,
            $_delimiter;

        public function __construct($file, array $columns, $directory = NULL, $delimiter = "|")  {
            $this->_db = $directory.$file.".db";
            $this->defineColumns($columns);
            $this->_directory = $directory;
            $this->_delimiter = $delimiter;
        } 

        public function db() {
            return $this->_db;
        }

        public function delimiter() {
            return $this->_delimiter;
        }       

        private function defineColumns($constants) {
            for ($i=0;$i<count($constants);$i++) {
                if(in_array($constants[$i], $this->_columns))
                    die("Column names must be unique");
                $column = new Column($constants[$i], $i);
                $this->_columns[$column->name()] = $column;
            }
        }

        public function columns($index, $search = "string") {
            switch ($search) {
                case "string";
                    return $this->_columns[$index];
                    break;
                case "position";
                    $keys = array_keys($this->_columns);
                    return $this->_columns[$keys[$index]];
                    break;
                default;
                    return false;
            }   
        }
    }
?>

类.column.php

<?php
    class Column { 
        const
            ALL = "0",
            STRING = "1",
            NUMBER = "2",
            INT = "3",
            AUTO_INCREMENT = "4",
            CURRENT_TIME = "5";

        private
            $_type = ALL,
            $_name,
            $_index,
            $_maxChars = "256";

        public function __construct($name, $index, $type = NULL, $maxChars = NULL)  {
            $this->_name = $name;
            $this->_index = $index;
            if(!is_null($type))
                setDataType($type);
            if(!is_null($maxChars))
                setMaxChars($maxChars);
            return $this;
        }

        public function setDataType($type) {
            switch ($type) {
                case ALL;
                case STRING;
                case NUMBER;
                case INT;
                case AUTO_INCREMENT;
                case CURRENT_TIME;
                    $this->_type = $type;
                    break;
                default;
                    return false;
            }
        }

        public function auditData($data) {
            switch ($this->_type) {
                case ALL;
                    $output = $data;
                    break;
                case STRING;
                    $output = (string) $data;
                    break;
                case NUMBER;
                    $output = (float) $data;
                    break;
                case INT;
                    $output = (int) $data;
                    break;
                case AUTO_INCREMENT;
                    $output = (int) $data;
                    break;
                case CURRENT_TIME;
                    $output = time();
                    break;
                default;
                    return false;
            }
            return $output;
        }

        public function setMaxChars($maxChars) {
            if(is_int($maxChars)) {
                $this->_maxChars = $maxChars;
            }
        }

        public function name() {
            return $this->_name;
        }

        public function index() {
            return $this->_index;
        }
    }
?>

我知道这是很多代码,但我无法弄清楚为什么会突然发生这种情况,实际上是在一次刷新中而不对代码进行任何更改。即使我回溯到也有效的早期版本,这种情况也会发生。

当我尝试这样做时:

print($this->_config->columns($key, "position"));

它返回:

可捕获的致命错误:Column 类的对象无法转换 串入/home/reithg/public_html/test/engine/class.database.php *50号线*

这表明我正在表演name()在类 Column 的成员上,该类有一个名为的公共方法name()

当我做:

print($this->_config->columns($key, "position")->name());

它返回(每次一个单词,因为它在 foreach 循环中);

第一 第二 第三 第四 第一 第二 第三 第四

所以它显然在它之前的 1 行工作。


答案是由于隐藏的字符位于课程.db file.

显示的错误与此无关,我要感谢所有花时间捐出两便士的人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP:致命错误:调用非对象上的成员函数[重复] 的相关文章

  • Laravel leftJoin 仅右表的最后一条记录

    我是 Laravel 的新手 我有两张桌子 1 产品 2 价格 products id product int p key name varchar prices id price int p key id product int
  • 为什么我的会话仍然存在?

    我一定很愚蠢 因为似乎一件相当明显的事情现在让我完全困惑 我有一个会议 ie SESSION handbag id 在某个时刻 我需要彻底终止这个会话 ie at the start of the page session start el
  • jQuery ajax 调用包含重音字符的 url 将错误的 Uri 从 IE 发送到服务器

    我在使用 IE 发送包含重音字符的 url 时遇到问题 这是一个简单的函数 function runjQueryTest var url test Beyonc get url function 在服务器 PHP 上我记录了请求uri的值
  • PHP MongoDb 驱动程序:如何设置执行代码的超时

    我有以下代码 它在 MongoDb 端执行一段代码 mongoCode new MongoCode Some JS code db gt execute mongoCode array socketTimeoutMS gt 1000000
  • 您的要求无法解析为 laravel 的一组可安装软件包

    我使用 5 7v Laravel 和 7 2 1v PHP 和 Composer 最新版本 但是当我想创建新项目时出现这些错误 Your requirements could not be resolved to an installabl
  • CakePHP 视图包括其他视图

    我有一个 CakePHP 应用程序 在某些时候会显示带有产品媒体 图片或视频 的视图 我想知道是否有某种方式可以包含另一个威胁视频或威胁图片的视图 具体取决于标志 我想将这些 小视图 用于其他几个目的 所以它应该 像 蛋糕组件一样 以便重用
  • 如何在 PHP 的 HTML 页面中显示错误消息?

    我有以下登录表单 login php 其中要求输入用户名和密码
  • PHP 中标头的使用

    非常简单的问题 这两个 PHP 版本 5 标头调用中哪一个是 最好的 header Not Modified true 304 header HTTP 1 1 304 Not Modified 我很确定第一个是最多价的 但只是好奇如果在 H
  • Laravel Vue 组件只能传递数字?

    在我的 UserMenu vue 中我写道 export default props nameVal data return 并在blade php中
  • 是否可以用 PHP 编写电子邮件解析器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • CodeIgniter:My_Lang 中的 get_instance

    我发现这个有用的国际化代码 http pastebin com SyKmPYTX http pastebin com SyKmPYTX 一切正常 除了我无法在此类中使用 CI 函数 我想从 DB 设置 languages 和 special
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • 如何处理 REST api 中的 php 通知、警告和错误?

    在 REST API 中 200 响应表明操作成功 PHP 默认情况下直接在响应正文中输出错误消息 而不更改响应代码 在 SPA 中 用户无法直接看到响应文本 因此 当应用程序未按预期工作时 我通过 FireBug 检查响应正文 以检查可能
  • PHP 接口有属性吗?

    PHP 中的接口有属性 还是只有方法 您可以在 DocBlock 中为接口声明属性 然后 IDE 将提示接口的这些属性 PhpStorm 会这样做 但这不会强制在实现类中实际实现这些字段 例如 property string passwor
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • 使用 php/regex 验证美国电话号码

    EDIT 我混合并修改了下面给出的两个答案 以形成完整的功能 现在它可以完成我想要的功能 然后是一些 所以我想我会将其发布在这里 以防其他人来寻找同样的东西 Function to analyze string against many p
  • PHP 拒绝从 var_dump、print 等输出数据

    我目前正在运行 WAMP 服务器 并且在过去的 30 分钟内一直在尝试弄清楚我的项目如何以及为什么不会输出任何指定的 PHP 数据 起初我以为是因为我有一个 htaccess文件的output buffering被禁用 所以我删除了它 仍然
  • PayPal 网关已拒绝请求。安全标头无效(#10002:安全错误 Magento

    在 magento 中增加 PayPal 预付款 我已填写 magento admin 中的所有凭据 但是当我进入前端并单击 pay pal 按钮时 它给出了 PayPal 网关已拒绝请求 安全标头无效 10002 安全错误 我用谷歌搜索了
  • PHPUnit - 模拟 S3Client 无法正常工作

    库 aws aws sdk php 2 PHP 版本 PHP 5 4 24 cli 作曲家 json require php gt 5 3 1 aws aws sdk php 2 require dev phpunit phpunit 4

随机推荐

  • 从 Bash 脚本在 PostgreSQL 中创建 FUNCTION

    我正在尝试从 Bash 脚本在 Postgres 数据库中创建一个函数 不幸的是 我无法让它工作 这是我的脚本 bin bash Save Postgres command to POSTGRES CMD read d POSTGRES C
  • 在pyspark中将列的内容拆分为行

    我有一个数据框 df SiteID LastRecID Col to split 2 1056962584 214 207 206 205 2 1056967423 213 208 2 1056870114 213 202 199 2 10
  • 为什么Delphi DLL可以使用WideString而不使用ShareMem?

    大卫对另一个问题的回答 https stackoverflow com a 9328272 937125显示返回 WideString 的 Delphi DLL 函数 我从来没有想过如果不使用ShareMem 我的测试DLL functio
  • WordPress:ACF 将行添加到重复器字段

    我正在寻找一种将行添加到 ACF Pro 中的重复器字段的方法 我发现这个帖子 https stackoverflow com questions 24879399 wordpress acf how to add rows to a re
  • 从 MIDI 文件中获取音符数据

    有没有办法从 MIDI 文件中获取音符数据 也就是说 我想将 MIDI 文件分解为其组成部分 以便它们采用唯一单词 或任何其他数据类型 的形式 我最终想要做的是接收 MIDI 文件并在音符中找到模式 进入每个音符 找到它的 被演奏的 频率
  • 为什么React中全局变量执行了两次

    我是前端开发和学习 React 的新手 现在我正在尝试构建一个 hello world 项目 执行后npx create react app myapp 我得到了一个初始的 React 项目 我刚刚在文件中编码App js import R
  • 无法创建套接字工厂“com.google.cloud.sql.mysql.SocketFactory;”

    我似乎无法让这个工作 我在用谷歌灵活的环境并想要连接到我的第二代云SQL数据库 我目前收到此异常 main ERROR com mahlzeit server BootstrappingServerConfig Error trying t
  • Rails:通过 ActiveResource 调用设计身份验证

    我的两个 Rails 应用程序 app1 app2 正在使用活动资源进行通信 app1 调用 app2 在 app2 内创建用户 app2 将创建用户 并希望 app1 然后将用户重定向到 app2 的经过身份验证的页面 从 app1 到
  • 为什么即使 SQL 语句产生语法错误,SQL 注入也会成功?

    In 这个问题 https stackoverflow com q 11873585 869912和一些评论 这个输入 input DELETE FROM table name 建议将 SQL 注入到此 PHP 语句中作为示例 input
  • C++ 中字符串向量的 Reserve() 函数

    我正在尝试填充字符串类型的向量 并且字符串的内存将定期更新 我在论坛中发现 由于每次更新大小时内存重新分配 这两个过程都会消耗大量时间另请阅读 储备功能几乎解决了这两种情况的问题 gt String http www cplusplus c
  • Twig 模板单元测试

    我开始考虑 Symfony 中 Twig 模板的持续集成 模板是独立的逻辑 模板中有错误 但在开发过程中我不想因为目视检查而分心 在 Symfony 中是否有任何现成的解决方案可以对 twig 文件进行单元测试 测试树枝模板中的语法错误 您
  • 如何限制 RAM 以测试内存不足的情况?

    我正在尝试重现当用户用完大量 RAM 时似乎出现的错误 限制计算机可以使用的可用 RAM 或填满大部分 RAM 的最佳方法是什么 我更愿意在不物理删除内存的情况下执行此操作 并且不运行一堆任意的内存密集型程序 即 Photoshop Qua
  • Asp.NET Core 2.1 HostedService - 继续在 Azure 上运行

    我们有一个使用 IHostedService 的 Web 应用程序 有一个这样的例子here https gist github com davidfowl a7dd5064d9dcf35b6eae1a7953d615e3 我们采用的方法是
  • 在 OS X 上初始化 D 运行时

    编辑 这似乎是一个长期存在的问题 没有迫在眉睫的解决方案 http d puremagic com issues show bug cgi id 8133 http d puremagic com issues show bug cgi i
  • Joda-Time:DateTime、DateMidnight 和 LocalDate 的使用

    乔达时间 http www joda org joda time 库包含不同的日期时间类 DateTime http www joda org joda time apidocs org joda time DateTime html 不可
  • 嵌入模式给出错误

    我试图将模式嵌入到我创建的其他模式中 但我不断收到此错误 我不完全确定这里出了什么问题 但我想要做的是将我的事件模式和兴趣模式的引用存储在用户模式内 如果有人能告诉我我做错了什么 那就太好了 谢谢 编辑 我现在收到一个新错误 Users D
  • Django:如何检查用户名是否已经存在?

    我不是 Django 的高级用户 我在网上看到了很多不同的方法 但它们都是针对修改模型的 或者太复杂 我无法理解 我正在重复使用UserCreationForm in my MyRegistrationForm class MyRegist
  • “this”关键字在 Nodejs 和浏览器中的行为不同

    我有这段代码 var obj1 var obj2 function x obj1 this function y obj2 this x y console log obj1 obj2 console log obj1 this 我使用命令
  • NSSavePanel 在沙箱应用程序后不保存文件

    我在保存字符串文件时遇到问题NSSavePanel将应用程序沙箱到 Mac App Store 后 我设置com apple security files user selected read write to YES和NSOpenPane
  • PHP:致命错误:调用非对象上的成员函数[重复]

    这个问题在这里已经有答案了 在这里遇到一个非常奇怪的错误 我正在编写一个平面文件数据库类 这一切都工作正常 直到我刷新 现在我不断收到此消息 致命错误 调用非对象上的成员函数 name home reithg public html tes