My website developed in PHP and all pages have .php extension. But i am using url rewrite facility for make url search engine friendly and coming with .html extension. So I have to know that I have to use canonical on each page to specify what version should be crawl by google or need to use 301 redirection. Please suggest me on this.
301 redirection is best way to fix canonical issues. And also suggest to add rel="canonical" tag on html header.
Don't use the rewrite in the first place. To the search engines there are no differences between .php and a .html extension. You are doing unnecessary things that can only harm and not help.
301 redirect should be used as both the pages are same. redirect benefit you to land all your traffic on single page and also will not create canonical issue.
You shouldn't use redirection or you shouldn't change .php to .html, let it be natural for better result.