Początek w PHP OOP

0

Witam,

Zacząłem raczkować w PHP i OOP. Próbuję zrobić próbę sprawdzenia połączenia z bazą przez PDO. Na tym etapie nie wiem za bardzo o co chodzi... dostaję taki błąd: Fatal error: Call to undefined function connect() in C:\xampp\htdocs\try\index.php on line 7

config.class.php:

<?php

class config
{

 static public function connect()
 {
	 ob_start();
	 session_start();
	 $pdo = new config('mysql:host=localhost; dbname=baza','root','');
 }
 
 static public function disconnect()
 {
	 ob_end_flush();
 }
 
}

?>
 

index.php:

 
<?php

require_once 'config.class.php';

config::connect();

if(connect() == true)
{
	echo "Działa";
}
else
{
	echo"Nie działa";
}

config::disconnect();

?>

Czy ktoś może mi wskazać błędy i dlaczego nie index.php nie może wczytać funkcji connect()?

0

Nie rozumiem w czym problem, przecież Ci napisali: Call to undefined function connect() in C:\xampp\htdocs\try\index.php on line 7

Po pierwsze nie definiowałeś funkcji connect. tylko metodę w klasie config, więc tak też musisz się odwołać. Po drugie bez sensu dwa razy wywołujesz connect. Możesz zrobić:

<?php
 
require_once 'config.class.php';
 
$connected = config::connect();
 
if($connected) // albo bezpośrednio tutaj config::connect()
{
    echo "Działa";
}
else
{
    echo"Nie działa";
}
 
config::disconnect();
 
?>
0

No właśnie myślałem, że mogę wywołać statyczną funkcję poprzez config(nazwa klasy)::connect()(nazwa funkcji). Naprawdę mało wiem o OOP, dlatego zapytałem.

Jak w takim razie zainkludować klasę config do pliku index.php aby była ona widoczna?

0

Możesz tak zrobić. Powiem więcej, nawet dobrze to zrobiłeś. Tylko jeżeli odwołujesz się do metody klasy to musisz wskazać klasę.

Ty pewnie myślisz, że to działa tak, że zrobisz include i to Ci includuje metody. Problem był w linii, w której zrobiłeś connect() zamiast config::connect(). Robiąc connect() php szuka:

function config() {
}

Ale ponieważ funkcja ta została zadeklarowana w klasie config to nie może jej znaleźć.

Funkcje to funkcje, a metody to metody:

class Foo {
    public function sayHello() {
        echo "Hello, jestem metodą w klasie Foo";
    }
}

function sayHello() {
    echo "jestem funkcja! Co wiecej nie naleze do klasy Foo!";
}

$foo = new Foo();
$foo->sayHello(); // Hello, jestem metodą w klasie Foo

sayHello(); //"jestem funkcja! Co wiecej nie naleze do klasy Foo!";
0

Rozumiem :) W index.php zmieniłem connect() na config::connect() i już błędu nie pokazuje. Teraz z kolei wyświetla się "Nie działa" z if w index.php. Czyli zaczytał funkcję z klasy, ok. Ale czy aby na pewno dobrze wpisałem wszystko w $pdo w config.class.php?

Niejednokrotnie logowałem się z mysql_connect do tej bazy z tymi danymi więc one są ok.

Tak teraz to wygląda:
config.class.php:

<?php

class config

{

 static public function connect()
 {
	 ob_start();
	 session_start();
	 $pdo = new PDO('mysql:host=localhost; dbname=baza', 'root', '');
 }
 
 static public function disconnect()
 {
	 ob_end_flush();
 }
 
}

?>
 

index.php:

<?php

include 'CLASS/config.class.php';

$connected = config::connect();

if($connected)
{
	echo "Działa";
}
else
{
	echo"Nie działa";
}

config::disconnect();

?>
 
0

Ok, sprawa się wyjaśniła. Brakowało return i try-catch.

1 użytkowników online, w tym zalogowanych: 0, gości: 1