OOP의 작동 방식을 이해하는 데 문제가 있는 것 같습니다. 작동하도록 코드를 변경했지만 제 생각에는 올바른 방식이 아닙니다. 다음 시나리오(아니요, 사용자 로그인을 직접 만드는 것이 아닙니다. 실제로는 로컬 개발자가 OOP를 더 잘 이해하기 위한 것입니다.):
database.php 파일이 있습니다:
으아아아그래서 이 수업에서는 데이터베이스 연결을 만들고 그 연결(객체?)을 반환합니다
그런 다음 두 번째 클래스인 유명한 User 클래스가 있습니다. (실제로 저는 자동 로딩을 사용하지 않지만 그것에 대해 알고 있습니다.)
으아아아이게 내 두 코스입니다. 보시다시피 별거 없습니다. 이제 함수 이름으로 혼동하지 마세요 login
- 사실 저는 데이터베이스에서 일부 사용자 이름과 사용자 메일을 선택하여 표시하려고 합니다. 나는 이것을 달성하려고 노력합니다:
여기서 문제가 발생합니다. 이 코드를 실행하면 다음과 같은 오류 메시지가 나타납니다.
잡히지 않은 오류: 정의되지 않은 메서드 Database::prepare()에 대한 호출
그리고 이 오류의 원인이 무엇인지 잘 모르겠습니다.
다음을 변경하면 코드가 제대로 실행됩니다.
database.php의 $conn
를 비공개가 아닌 공개로 변경하세요(이건 나쁜 것 같아요...? 하지만 비공개일 때는 데이터베이스 클래스 내에서만 쿼리를 수행할 수 있습니다. 그렇죠? 따라서 이러한 쿼리를 모두 데이터베이스에 넣어야 합니다. 수업? 큰 프로젝트에서는 너무 커지기 때문에 이건 나쁜 것 같아요..)
제가 만들고 싶은 두 번째 변화는 다음과 같습니다.
user.php 파일에서 $this->conn->prepare
修改为$this->conn->conn->prepare
를 변경하세요. 여기서는 정말 이유를 모르겠습니다.
내 말은, user.php
的构造函数中,我有一个 $this->conn = new Database()
,并且由于 new Database 将从 DB 类返回我的连接对象,我真的不知道为什么必须有第二个 conn->
Database
클래스 같은 클래스를 만들지 마세요. PDO에 추가 기능을 추가하는 경우 데이터베이스 래퍼를 만드는 것이 합리적입니다. 그러나 현재 코드를 고려하면 일반 PDO를 사용하는 것이 더 좋습니다.database.php:
으아아아user.php
으아아아app.php
으아아아출력:
으아아아PDO에 대한 자세한 내용은 내 (유일하게 올바른) PDO 튜토리얼을 확인하세요.