다른 클래스에서는 PDO 연결을 어떻게 사용하나요?
P粉548512637
P粉548512637 2023-10-23 09:37:51
0
1
692

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->

P粉548512637
P粉548512637

모든 응답(1)
P粉268284930
  • 쓸데없는 Database 클래스 같은 클래스를 만들지 마세요. PDO에 추가 기능을 추가하는 경우 데이터베이스 래퍼를 만드는 것이 합리적입니다. 그러나 현재 코드를 고려하면 일반 PDO를 사용하는 것이 더 좋습니다.
  • 일반 PDO 또는 데이터베이스 클래스에서 단일 $db 인스턴스를 만듭니다.
  • 데이터베이스 연결이 필요한 모든 클래스에 생성자 매개변수로 전달하세요

database.php:

으아아아

user.php

으아아아

app.php

으아아아

출력:

으아아아

PDO에 대한 자세한 내용은 내 (유일하게 올바른) PDO 튜토리얼을 확인하세요.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿