php 实例化 问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 实例化 问题相关的知识,希望对你有一定的参考价值。
一个类D里有一个属性A,A也是一个类;
A里有属性B,B还是一个类;
B里有一个属性C,而C还是一个类;一共5层,这里省略
现在实例化这个类D,取出属性A。
$obj1 = new D;
$obj2 = $obj1->A;
这个$obj2为什么是空的,也就是说这个属性A并没有取出来?
比如说 class D
public $a = new class A; // 属性a是类A的实例
class A
public $b = new Class B; //属性b是类B的实例
这样当实例化D的时候:$obj1 = new D;
这样可以拿到A类的实例:$obj2 = $obj1->a;
有问题追问吧,请采纳。 参考技术A ison_decode()后面加个参数 true 就是数组
如果对象没有实例化,调用静态函数返回NULL? PHP 面向对象
【中文标题】如果对象没有实例化,调用静态函数返回NULL? PHP 面向对象【英文标题】:Calling static function returns NULL if object is not instanced? PHP OOP 【发布时间】:2016-09-08 05:24:49 【问题描述】:问候好人,
我最近遇到了一些 OOP 问题。首先,我希望从头开始创建 CRUD Db 类。这是一个代码:
class Database
public static $link;
public $message;
public function __construct ()
try
self::$link = mysqli_connect(HOST, USER, PASS, DB);
if (!self::$link)
echo self::$link->error;
catch (Exception $e)
die(" Failed connecting to DB") ;
public static function query($SQL)
return self::$link->query($SQL);
public static function select($table, array $columns)
$columns=implode(",",$columns);
$result=self::query("SELECT $columns FROM $table");
return self::$link->fetch($result);
所以问题是这样的:
如果我这样调用我的静态选择函数:
Database::select('users', array('username'=>'user'));
它返回:致命错误:在..中的非对象上调用成员函数 query()
如果我像这样调试连接:var_dump(Database::$link)
它返回 NULL
但如果我放置“$db = new Database();”在那条线之上,它有效吗?
谁能告诉我我做错了什么?
谢谢!
【问题讨论】:
我没有注意到:(HOST, USER, PASS, DB) 是从另一个文件中包含的常量。 【参考方案1】:您正在调用静态方法。所以,对象不会被实例化。所以,__construct()
方法 不会 被调用。这意味着不会填充 $link
属性。
无论您做什么,都需要连接到您的数据库。您可以调用静态方法connect()
,它将连接到数据库并填充$link
,或者确保在每个需要连接的方法中建立连接:
public static function connect()
try
self::$link = mysqli_connect(HOST, USER, PASS, DB);
if (!self::$link)
echo self::$link->error;
catch (Exception $e)
die(" Failed connecting to DB") ;
public function select(SQL)
if (!static::$link)
static::connect();
// your stuff
这是你想学习的好东西。在处理此类特定项目之前,您需要熟悉 OOP:构造函数/析构函数、访问器、修改器、静态方法等。这很重要,因为它是您接下来想要做的所有事情的基础。
【讨论】:
@YourCommonSense 我了解 MilosM 想学习。这里的主要问题不是数据库的使用,而是对 OOP 原则的理解。 @Arcesilas 感谢您的明确解释!我认为静态调用数据库会创建一个实例,因为它的 db 对象是在构造函数中创建的,因此 $link 将保存 DB 对象再次感谢您的帮助;)以上是关于php 实例化 问题的主要内容,如果未能解决你的问题,请参考以下文章