Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何访问私有属性/方法?_Php_Class_Oop_Methods_Private - Fatal编程技术网

Php 如何访问私有属性/方法?

Php 如何访问私有属性/方法?,php,class,oop,methods,private,Php,Class,Oop,Methods,Private,我是OOP编程新手,我正在尝试为数据库连接设置一个私有类db: 我的班级: class db { private $_db; private function db() { $this->db = new mysqli('localhost','x','x','x'); $this->db->set_charset('utf'); } } 在另一个文件中,我有以下代码: $db = new db(); $sql = "SELECT ne

我是OOP编程新手,我正在尝试为数据库连接设置一个私有类db:

我的班级:

class db
{
private $_db;

private function db()   
{
$this->db = new mysqli('localhost','x','x','x');
$this->db->set_charset('utf');
}
}
在另一个文件中,我有以下代码:

$db = new db();
                $sql = "SELECT news, DATE_FORMAT(date, '%D %b') AS date FROM news ORDER       
BY DATE_FORMAT(date, '%Y, %m, %d') DESC LIMIT 3";
                $r = $db->db->query($sql);
                while($row=$r->fetch_assoc())
                {
                    echo '<b>'. $row['date'] . '</b></br> ' . $row['news'] .'</br>   
</br>';
                }
$db=newdb();
$sql=“选择新闻,日期\格式(日期,“%D%b”)作为新闻订单中的日期
按日期格式(日期,%Y,%m,%d')说明限制3”;
$r=$db->db->query($sql);
而($row=$r->fetch_assoc())
{
回显“.$row['date']”。
“.$row['news']”。

'; }
它适用于公共场合,但不适用于私人场合

我读到私有方法只能在类中访问,但不能真正理解如何访问。谁能给我一个提示吗

问候
杰克

我不知道你的方法为什么是私有的。本质上,您想要在类外部使用的任何方法都应该是公共的。这导致了getter和setter的创建


getter返回私有变量字段,setter将这些字段设置为新值。这只是一种安全的方式来强制类型并干净地接受类修改。

OOP的关键原则之一是将接口与实现分离。类可以表示为一个黑盒,外部世界使用公共方法和属性与您的黑盒进行交互

而私有方法和属性是内部的,用于实现功能


无需将
函数db()
设为私有,因为到数据库的连接必须由类作为到外部世界的函数提供。

私有方法和私有属性只能在同一类(范围)内访问。应该充分考虑私有属性和方法的使用,私有方法或私有属性避免了定义类继承人的任何可达性或可继承性


受保护的方法和私有属性只能在同一类及其继承者内部访问。对于类内部逻辑及其属性,建议使用受保护的方法和私有。

这就是为什么会有私有变量。您不能直接访问它们。为他们提供getter。例如,
public function getDB(){return$this->\u db;}
只能在类内引用私有方法。私有方法和属性在外部是不可访问的。此外,您应该使用
\u construct()
作为构造函数方法名,而不是使用与类相同的旧方法命名构造函数。您可能不希望构造函数是私有的,除非您试图实现单例。用例子来解释这一切。投票结束这是一个重复的问题。看看这里给出的答案:ok;也许我理解错了;我想这和你的密码安全有关?很抱歉,如果我的问题听起来很困惑,但我是OOP新手,我正在尝试了解各种概念。对所有方法和属性使用public可以吗?它是否以任何方式影响系统安全性?我是否应该将我的数据库连接类保持为私有以提高安全性?@Jack Yes和no。公共方法用于您知道其他类需要访问的变量字段。例如,如果我有一个变量表示数据库中有多少个条目,我可能需要一个公共getter。但是,在类内创建数据库的代码可能是私有的,因为我不希望在类外调用它。这不是安全本身,更重要的是代码的安全性。它会告诉其他可能使用你的代码的人他们能做什么,不能做什么(安全的)。迪伦,干杯,尽管如此,将你的所有类声明为公共类会是一种不好的做法吗?如果我这样做,我的网站是否会变得不安全?在我的示例中,我真的不知道如何使db类作为私有类工作。公共和私有并不能真正创建web安全性。一般来说,是的,大多数类本身是公共的,因为需要访问这些类本身。它更多的是关于方法和变量,而不是类。(尽管可以使用私有内部类和其他特殊情况。)