Llamada a una función miembro en un no objeto [duplicado]
Entonces estoy refactorizando mi código para implementar más programación orientada a objetos. Configuré una clase para contener atributos de página.
class PageAtrributes
{
private $db_connection;
private $page_title;
public function __construct($db_connection)
{
$this->db_connection = $db_connection;
$this->page_title = '';
}
public function get_page_title()
{
return $this->page_title;
}
public function set_page_title($page_title)
{
$this->page_title = $page_title;
}
}
Más tarde llamo a la función set_page_title() así
function page_properties($objPortal) {
$objPage->set_page_title($myrow['title']);
}
Cuando lo hago recibo el mensaje de error:
Llamada a una función miembro set_page_title() en un no objeto
Entonces, ¿qué me estoy perdiendo?
Significa que $objPage
no es una instancia de un objeto. ¿Podemos ver el código que usaste para inicializar la variable?
Como espera un tipo de objeto específico, también puede utilizar los documentos de la función de sugerencias de tipo de PHP para obtener el error cuando se viola su lógica:
function page_properties(PageAtrributes $objPortal) {
...
$objPage->set_page_title($myrow['title']);
}
Esta función solo aceptará PageAtrributes
para el primer parámetro.
Hay una manera fácil de producir este error:
$joe = null;
$joe->anything();
Representará el error:
Error fatal: llamada a una función miembro
anything()
en un no objeto en /Applications/XAMPP/xamppfiles/htdocs/casMail/dao/server.php en la línea 23
Sería mucho mejor si PHP simplemente dijera,
Error grave: la llamada de Joe no está definida porque (a) Joe es nulo o (b) Joe no se define
anything()
en la línea <##>.
Por lo general, ha creado su clase de modo que $joe
no esté definida en el constructor o
O $objPage
no es una variable de instancia O estás sobrescribiendo $objPage
con algo que no es una instancia de class PageAttributes
.
También podría significar que cuando inicializó su objeto, es posible que haya reutilizado el nombre del objeto en otra parte de su código. Por lo tanto, cambia su aspecto de un objeto a una variable estándar.
ES DECIR
$game = new game;
$game->doGameStuff($gameReturn);
foreach($gameArray as $game)
{
$game['STUFF']; // No longer an object and is now a standard variable pointer for $game.
}
$game->doGameStuff($gameReturn); // Wont work because $game is declared as a standard variable. You need to be careful when using common variable names and were they are declared in your code.
function page_properties($objPortal) {
$objPage->set_page_title($myrow['title']);
}
parece diferentes nombres de variables $objPortal vs $objPage