PHP报错:Trying to get property of non-object 解决求助
Hey there, let's work through this Trying to get property of non-object error you're seeing at line 44 of C:\xampp\htdocs\Parser\class.php!
What This Error Actually Means
First off, this error tells you that you're trying to access a property (using the -> operator) on something that isn't an object. That "something" could be null, an array, a string, or a boolean—basically anything that doesn't have properties to access.
Why It Happens In Your Case
You mentioned calling the function directly with a string link works fine, but using the class method breaks things. That points straight to an issue with how $Habr->links is being handled in your class context. Let's break down common scenarios based on what your var_dump($Habr->links) might show:
Scenario 1: $Habr->links is null or a non-object primitive
If your var_dump shows null, false, or a string/number, that means the code responsible for populating $Habr->links (like a web scrape or DOM parse) failed when running through the class method. Maybe a network request timed out, or the HTML structure changed and your parser couldn't find the expected elements.
- Fix: Trace back where
$Habr->linksgets set in your class. Add debug checks right after that assignment (e.g.,var_dump($Habr->links); die;) to see why it's not the object you expect. Compare this flow to your direct string call—did you skip a critical initialization step in the class?
Scenario 2: $Habr->links is an array, not an object
If your var_dump shows an array, you're using the wrong syntax to access its elements. The -> operator is for objects; arrays use [].
- Fix: Swap out code like
$Habr->links->myPropertyfor$Habr->links['myProperty'].
Scenario 3: $Habr->links is an object, but a nested property is null
Maybe line 44 looks like $Habr->links->post->url—where $Habr->links is an object, but $Habr->links->post is null. This happens when your parser finds a parent element but can't locate the child you're trying to access.
- Fix: Add safety checks before accessing nested properties. For example:
// PHP 7+ null coalescing operator for quick defaults $url = $Habr->links->post->url ?? 'No URL found'; // Or explicit checks for older PHP versions if (isset($Habr->links->post) && is_object($Habr->links->post)) { $url = $Habr->links->post->url; } else { // Handle the missing property (log it, set a default, etc.) }
Quick Debugging Step
Right before line 44, add this to see exactly what you're working with:
var_dump($Habr->links); die;
This will freeze execution and show you the exact type/value of $Habr->links at the moment the error would hit. Compare this to the working direct string call, and the difference will almost certainly point you to the fix.
内容的提问来源于stack exchange,提问作者Slavick Vinnitskyi

