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

PHP

توسط mahbobe-prog در 4 سال پیش
0 1.4k 7 4 سال پیش
mahbobe-progdanielreza-irdevphp-secwwworker
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]

خوش آمدید

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

لطفا ابتدا لاگین کنید