La class b contiene 2 errori. Il primo è la mancanza della creazione dell'istanza come hai indicato. Il. secondo è che utilizzato in maniera procedurale, mysqli_query ha bisogno del parametro "connessione".

Codice PHP:
class {

 function 
pluto() {
  
$link mysqli_connect("localhost""my_user""my_password""world");  
  
$this->sql mysqli_query($link,"SELECT * FROM tab");
 }



oppure

Codice PHP:
class 
  private 
$link;

 function 
__construct() {
  
$link mysqli_connect("localhost""my_user""my_password""world");
 }

 function 
pluto() {  
  
$this->sql mysqli_query($link,"SELECT * FROM tab"); 
 }


Vedi la differenza ? Nel primo caso la query puo' essere eseguita soltanto da pippo(). Dovresti creare un'altra connessione si tu dovessi fare un'altra query in un altro metodo.
Nel secondo caso si potrebbe eseguire una query da un altro metodo senza dover creare una nuova connessione.

In maniera OOP mysqli non ha bisogno di tramandare la connessione. Essa è una "variabile" visibile e utilizzabile da tutti i metodi dell'oggetto mysqli, un po' come $link nell'esempio di sopra. Quindi si potrebbe ipotizzare che l'oggetto mysqli è stato creato usando mysqli procedurale.

Codice PHP:

class mysqli {

private 
$link;

 function 
__construct($host,$user,$password,$dbname) {  
  
$link mysqli_connect($host,$user,$password,$dbname); 
  ....
 }

 function 
query($string) {
  return 
mysqli_query($link,$string);
 }