خطای Fatal error: Call to a member function x() on a non-object

PHP

توسط mahbobe-prog در 6 سال پیش
0 46.2k 7 6 سال پیش
mahbobe-prog daniel reza php-sec wwworker
0

سلام وقت بخیر
داخل صفحه register از کلاس یوزر استفاده میکنم ولی این error رو میگیره
صفحه register

include ('classUser.php');

	$userClass = new user();
	$userClass -> setPass ($_POST['password']) ;

	if (isset($_POST['submit']) ) 
	{
	$userClass -> $value = array ( $_POST['userName'] , $_POST['password'] , $_POST['confirmPassword'] , $_POST['firstName'] , $_POST['lastName'] ) ;
	$userClass -> register( $_POST['userName'] , $_POST['password'] , $_POST['confirmPassword'] , $_POST['firstName'] , $_POST['lastName']);
	}

بخشی از classUser

include( '../ValidFormClass/ValidFormClass.php' ) ;
include( '../database-adapter-2013-10-29/DbAdapter.php' ) ;
$validForm = new ValidateForm() ;
//$dataBase = new DBclass() ;
		


class user{
	var $user_id ;
	var $user_pass ;
	var $first_name ;
	var $last_name ;
	var $user_passConf ;
	var $value ;
	var $main_page;

	function setPass($password) 
	{
		if ( $validForm -> IsPass( $password ) )
		{
			if( $validForm -> check_new_password ( $userName , $confirmPassword ) )
			{
				$this -> user_pass = $password ;
			}
		}
	}
}

Notice: Undefined variable: validForm in C:\xampp\htdocs\classUser1\classUser.php on line 28
Fatal error: Call to a member function IsPass() on a non-object in C:\xampp\htdocs\classUser1\classUser.php on line 28

آخرین ویرایش: 16-05-2014 ساعت 17:58، توسط Daniel
0

سلام
متغیر validform$ رو باید داخل کلاس تعریف کنید:

<?php
include( '../ValidFormClass/ValidFormClass.php' ) ;
include( '../database-adapter-2013-10-29/DbAdapter.php' ) ;
//$dataBase = new DBclass() ;
        


class user{
    var $user_id ;
    var $user_pass ;
    var $first_name ;
    var $last_name ;
    var $user_passConf ;
    var $value ;
    var $main_page;

    function setPass($password) 
    {
		$validForm = new ValidateForm() ;
        if ( $validForm -> IsPass( $password ) )
        {
            if( $validForm -> check_new_password ( $userName , $confirmPassword ) )
            {
                $this -> user_pass = $password ;
            }
        }
    }
}
0

سلام
یعنی باید داخل هر متدی که ازین کلاس استفاده میشه بذارم ؟ چون بیرون متد گذاشتم error گرفت .
داخل متد گذاشتم او ن error رفع میشه ولی این error رو میگیره
Fatal error: Call to undefined method ValidateForm::IsEmpty() in C:\xampp\htdocs\validFormClass\validFormClass.php on line 20

0

> یعنی باید داخل هر متدی که ازین کلاس استفاده میشه بذارم ؟ چون بیرون متد گذاشتم error گرفت . داخل متد گذاشتم او ن error رفع میشه ولی این error رو میگیره Fatal error: Call to undefined method ValidateForm::IsEmpty() in C:\xampp\htdocs\validFormClass\validFormClass.php on line 20

سلام
باید یه متد برای اینکار تعریف کنید و بعدا این متد رو فراخوانی کنید. البته، در صورتی که متد جادویی construct__ وجود نداشته باشه.
کدهای داخل متد جاودیی construct__ موقع ساخت نمونه جدید از کلاس بصورت اتوماتیک اجرا میشن.

<?php
include( '../ValidFormClass/ValidFormClass.php' ) ;
include( '../database-adapter-2013-10-29/DbAdapter.php' ) ;
//$dataBase = new DBclass() ;
        

class user{
    var $user_id ;
    var $user_pass ;
    var $first_name ;
    var $last_name ;
    var $user_passConf ;
    var $value ;
    var $main_page;
	var $validForm; // <--- new property

	function __construct(){
	
		$this->validForm = new ValidateForm() ;
	}
	
    function setPass($password) 
    {
        
        if ( $this->validForm-> IsPass( $password ) )
        {
            if( $this->validForm -> check_new_password ( $userName , $confirmPassword ) )
            {
                $this->user_pass = $password ;
            }
        }
    }
}

خطایی که دریافت میکنید بخاطر اینه که متد IsEmpty داخل کلاستون وجود نداره.

نکته: بهتره برای تعریف پراپرتی ها از کلمه کلیدی var استفاده نکنید . از var زمانی استفاده میشد که public،protected و private وجود نداشتن(در php4). الان بجای var میتونید از public استفاده کنید که در این صورت پراپرتی ها در خارج از کلاس هم قابل دسترس ان. [توضیحات بیشتر در php.net]

0

سلام
ممنون از راهنماییتون
کلاس validForm رو چک کردم متدIsEmpty داخلش بود
به هر متدی که داخل این کلاس هس error Fatal error: Call to a member function IsPass() on a non-object in C:\xampp\htdocs\classUser1\classUser.php on line 28 رو میگیره با این تفاوت که اسم متد عوض میشه
ممنون میشم مثل همیشه راهنماییم کنین

0

شما باز دارید همون ارور اولی رو میگید که!
کلاس validateform و classuser رو بطور کامل قرار بدید
در ضمن این کد رو تو متد قرار بدید و اجرا کنید و نتیجه رو بذارید

print_r( get_class_methods($this->validForm) );
0

سلام
ممنون مشکلم رفع شد:smilingsmiley:

0

سلام
برای دوستانی که هنوز این مشکلو دارن: [url]http://www.softafzar.net/thread2381.html/[/url]

خوش آمدید

برای طرح سوال، ایجاد بحث و فعالیت در سایت نیاز است ابتدا وارد حساب کاربری خود شوید. در صورتی که هنوز عضو سایت نیستید میتوانید در عرض تنها چند ثانیه ثبت نام کنید.